148 lines
4.6 KiB
Dart
148 lines
4.6 KiB
Dart
// ignore_for_file: use_build_context_synchronously
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:tetra_stats/gen/strings.g.dart';
|
|
|
|
const TextStyle verdictStyle = TextStyle(fontSize: 14, fontFamily: "Eurostile Round Condensed", color: Colors.grey, height: 1.1);
|
|
|
|
class CompareThingy extends StatelessWidget {
|
|
final num greenSide;
|
|
final num redSide;
|
|
final String label;
|
|
final bool higherIsBetter;
|
|
final int? fractionDigits;
|
|
final String? postfix;
|
|
final String? prefix;
|
|
const CompareThingy(
|
|
{super.key,
|
|
required this.greenSide,
|
|
required this.redSide,
|
|
required this.label,
|
|
required this.higherIsBetter,
|
|
this.fractionDigits,
|
|
this.prefix,
|
|
this.postfix});
|
|
|
|
String verdict(num greenSide, num redSide, int fraction) {
|
|
var f = NumberFormat("+#,###.##;-#,###.##");
|
|
f.maximumFractionDigits = fraction;
|
|
return f.format((greenSide - redSide)) + (postfix ?? "");
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var f = NumberFormat.decimalPattern(LocaleSettings.currentLocale.languageCode);
|
|
f.maximumFractionDigits = fractionDigits ?? 0;
|
|
return Padding(
|
|
padding: const EdgeInsets.fromLTRB(16, 2, 16, 2),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Expanded(
|
|
child: Container(
|
|
padding: const EdgeInsets.all(4),
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
colors: const [Colors.green, Colors.transparent],
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
transform: const GradientRotation(0.6),
|
|
stops: [
|
|
0.0,
|
|
higherIsBetter
|
|
? greenSide > redSide
|
|
? 0.6
|
|
: 0
|
|
: greenSide < redSide
|
|
? 0.6
|
|
: 0
|
|
],
|
|
)
|
|
),
|
|
child: Text(
|
|
(prefix ?? "") + f.format(greenSide) + (postfix ?? ""),
|
|
style: const TextStyle(
|
|
fontSize: 22,
|
|
shadows: <Shadow>[
|
|
Shadow(
|
|
offset: Offset(0.0, 0.0),
|
|
blurRadius: 1.0,
|
|
color: Colors.black,
|
|
),
|
|
Shadow(
|
|
offset: Offset(0.0, 0.0),
|
|
blurRadius: 2.0,
|
|
color: Colors.black,
|
|
),
|
|
Shadow(
|
|
offset: Offset(0.0, 0.0),
|
|
blurRadius: 8.0,
|
|
color: Colors.black,
|
|
),
|
|
],
|
|
),
|
|
textAlign: TextAlign.start,
|
|
),
|
|
)),
|
|
Column(
|
|
children: [
|
|
Text(
|
|
label,
|
|
style: const TextStyle(fontSize: 22),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
Text(
|
|
verdict(greenSide, redSide,
|
|
fractionDigits != null ? fractionDigits! + 2 : 0),
|
|
style: verdictStyle,
|
|
textAlign: TextAlign.center,
|
|
)
|
|
],
|
|
),
|
|
Expanded(
|
|
child: Container(
|
|
padding: const EdgeInsets.all(4),
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
colors: const [Colors.red, Colors.transparent],
|
|
begin: Alignment.centerRight,
|
|
end: Alignment.centerLeft,
|
|
transform: const GradientRotation(-0.6),
|
|
stops: [
|
|
0.0,
|
|
higherIsBetter
|
|
? redSide > greenSide
|
|
? 0.6
|
|
: 0
|
|
: redSide < greenSide
|
|
? 0.6
|
|
: 0
|
|
],
|
|
)),
|
|
child: Text(
|
|
(prefix ?? "") + f.format(redSide) + (postfix ?? ""),
|
|
style: const TextStyle(
|
|
fontSize: 22,
|
|
shadows: <Shadow>[
|
|
Shadow(
|
|
offset: Offset(0.0, 0.0),
|
|
blurRadius: 3.0,
|
|
color: Colors.black,
|
|
),
|
|
Shadow(
|
|
offset: Offset(0.0, 0.0),
|
|
blurRadius: 8.0,
|
|
color: Colors.black,
|
|
),
|
|
],
|
|
),
|
|
textAlign: TextAlign.end,
|
|
),
|
|
)),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|