107 lines
4.3 KiB
Dart
107 lines
4.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/flutter_svg.dart';
|
|
import 'package:tetra_stats/data_objects/distinguishment.dart';
|
|
import 'package:tetra_stats/gen/strings.g.dart';
|
|
import 'package:tetra_stats/main.dart';
|
|
|
|
class DistinguishmentThingy extends StatelessWidget{
|
|
final Distinguishment distinguishment;
|
|
|
|
const DistinguishmentThingy(this.distinguishment, {super.key});
|
|
|
|
List<InlineSpan> getDistinguishmentTitle(String? text) {
|
|
// TWC champions don't have header in their distinguishments
|
|
if (distinguishment.type == "twc") return [const TextSpan(text: "TETR.IO World Champion", style: TextStyle(fontSize: 28, fontWeight: FontWeight.bold, color: Colors.yellowAccent))];
|
|
// In case if it missing for some other reason, return this
|
|
if (text == null) return [const TextSpan(text: "Header is missing", style: TextStyle(fontSize: 28, fontWeight: FontWeight.bold, color: Colors.redAccent))];
|
|
|
|
// Handling placeholders for logos
|
|
var exploded = text.split(" "); // wtf PHP reference?
|
|
List<InlineSpan> result = [];
|
|
for (String shit in exploded){
|
|
switch (shit) { // if %% thingy was found, insert svg of icon
|
|
case "%osk%":
|
|
result.add(WidgetSpan(child: Padding(
|
|
padding: const EdgeInsets.only(left: 8),
|
|
child: SvgPicture.asset("res/icons/osk.svg", height: 28),
|
|
)));
|
|
break;
|
|
case "%tetrio%":
|
|
result.add(WidgetSpan(child: Padding(
|
|
padding: const EdgeInsets.only(left: 8),
|
|
child: SvgPicture.asset("res/icons/tetrio-logo.svg", height: 28),
|
|
)));
|
|
break;
|
|
default: // if not, insert text span
|
|
result.add(TextSpan(text: " $shit", style: const TextStyle(fontSize: 28, fontWeight: FontWeight.bold, color: Colors.white)));
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// Distinguishment title is barely predictable thing.
|
|
/// Receives [text], which is footer and returns sets of widgets for RichText widget
|
|
String getDistinguishmentSubtitle(String? text){
|
|
// TWC champions don't have footer in their distinguishments
|
|
if (distinguishment.type == "twc") return "${distinguishment.detail} TETR.IO World Championship";
|
|
// In case if it missing for some other reason, return this
|
|
if (text == null) return "Footer is missing";
|
|
// If everything ok, return as it is
|
|
return text;
|
|
}
|
|
|
|
Color getCardTint(String type, String detail){
|
|
switch(type){
|
|
case "staff":
|
|
switch(detail){
|
|
case "founder": return const Color(0xAAFD82D4);
|
|
case "kagarin": return const Color(0xAAFF0060);
|
|
case "team": return const Color(0xAAFACC2E);
|
|
case "team-minor": return const Color(0xAAF5BD45);
|
|
case "administrator": return const Color(0xAAFF4E8A);
|
|
case "globalmod": return const Color(0xAAE878FF);
|
|
case "communitymod": return const Color(0xAA4E68FB);
|
|
case "alumni": return const Color(0xAA6057DB);
|
|
default: return theme.colorScheme.surface;
|
|
}
|
|
case "champion":
|
|
switch (detail){
|
|
case "blitz":
|
|
case "40l": return const Color(0xAACCF5F6);
|
|
case "league": return const Color(0xAAFFDB31);
|
|
}
|
|
case "twc": return const Color(0xAAFFDB31);
|
|
default: return theme.colorScheme.surface;
|
|
}
|
|
return theme.colorScheme.surface;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Card(
|
|
surfaceTintColor: getCardTint(distinguishment.type, distinguishment.detail??"null"),
|
|
child: Column(
|
|
children: [
|
|
Row(
|
|
children: [
|
|
const Spacer(),
|
|
Text(t.distinguishment, style: const TextStyle(fontFamily: "Eurostile Round Extended")),
|
|
const Spacer()
|
|
],
|
|
),
|
|
RichText(
|
|
textAlign: TextAlign.center,
|
|
text: TextSpan(
|
|
style: DefaultTextStyle.of(context).style,
|
|
children: getDistinguishmentTitle(distinguishment.header),
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.fromLTRB(8.0, 4.0, 8.0, 4.0),
|
|
child: Text(getDistinguishmentSubtitle(distinguishment.footer), style: Theme.of(context).textTheme.displayLarge, textAlign: TextAlign.center),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
} |