forked from firka/student-legacy
75 lines
2.3 KiB
Dart
75 lines
2.3 KiB
Dart
import 'package:dotted_border/dotted_border.dart';
|
|
import 'package:refilc/theme/colors/colors.dart';
|
|
import 'package:refilc/ui/widgets/grade/grade_tile.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:i18n_extension/i18n_extension.dart';
|
|
|
|
class AverageDisplay extends StatelessWidget {
|
|
const AverageDisplay({
|
|
super.key,
|
|
this.average = 0.0,
|
|
this.border = false,
|
|
this.dashed = false,
|
|
this.scale = 1.0,
|
|
});
|
|
|
|
final double average;
|
|
final bool border;
|
|
final bool dashed;
|
|
final double scale;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Color color = average == 0.0
|
|
? AppColors.of(context).text.withValues(alpha: .8)
|
|
: gradeColor(context: context, value: average);
|
|
|
|
String averageText = average.toStringAsFixed(2);
|
|
if (I18n.of(context).locale.languageCode != "en") {
|
|
averageText = averageText.replaceAll(".", ",");
|
|
}
|
|
|
|
Widget txtWidget = Text(
|
|
average == 0.0 ? "-" : averageText,
|
|
textAlign: TextAlign.center,
|
|
style: TextStyle(
|
|
color: color, fontWeight: FontWeight.w600, fontSize: scale * 15.0),
|
|
maxLines: 1,
|
|
);
|
|
|
|
return Container(
|
|
width: (border ? 57.0 : 54.0) * scale,
|
|
padding: (border && dashed)
|
|
? null
|
|
: EdgeInsets.symmetric(
|
|
horizontal: (6.0 - (border ? 2 : 0)) * scale,
|
|
vertical: (5.0 - (border ? 2 : 0))) *
|
|
scale,
|
|
decoration: BoxDecoration(
|
|
borderRadius:
|
|
(border && dashed) ? null : BorderRadius.circular(45.0 * scale),
|
|
border: border && !dashed
|
|
? Border.fromBorderSide(BorderSide(
|
|
color: color.withValues(alpha: .5), width: 1.0 * scale))
|
|
: null,
|
|
color: !border
|
|
? color.withValues(alpha: average == 0.0 ? .15 : .25)
|
|
: null,
|
|
),
|
|
child: (border && dashed)
|
|
? DottedBorder(
|
|
strokeWidth: 1.0 * scale,
|
|
padding: EdgeInsets.all(4.0 * scale),
|
|
color: color.withValues(alpha: .5),
|
|
dashPattern: const [6, 6],
|
|
radius: Radius.circular(45.0 * scale),
|
|
borderType: BorderType.RRect,
|
|
child: Center(
|
|
child: txtWidget,
|
|
),
|
|
)
|
|
: txtWidget,
|
|
);
|
|
}
|
|
}
|