forked from firka/student-legacy
116 lines
3.4 KiB
Dart
116 lines
3.4 KiB
Dart
import 'package:refilc/helpers/average_helper.dart';
|
|
import 'package:i18n_extension/i18n_widget.dart';
|
|
import 'package:refilc_kreta_api/models/grade.dart';
|
|
import 'package:refilc_mobile_ui/common/widgets/cretification/certification_view.dart';
|
|
import 'package:refilc/ui/widgets/grade/grade_tile.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
|
import 'certification_card.i18n.dart';
|
|
|
|
class CertificationCard extends StatelessWidget {
|
|
const CertificationCard(this.grades,
|
|
{super.key, required this.gradeType, this.padding});
|
|
|
|
final List<Grade> grades;
|
|
final GradeType gradeType;
|
|
final EdgeInsetsGeometry? padding;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
String title = getGradeTypeTitle(gradeType);
|
|
double average = AverageHelper.averageEvals(grades, finalAvg: true);
|
|
String averageText = average.toStringAsFixed(1);
|
|
if (I18n.of(context).locale.languageCode != "en") {
|
|
averageText = averageText.replaceAll(".", ",");
|
|
}
|
|
Color color = gradeColor(context: context, value: average);
|
|
Color textColor;
|
|
|
|
if (color.computeLuminance() >= .5) {
|
|
textColor = Colors.black;
|
|
} else {
|
|
textColor = Colors.white;
|
|
}
|
|
|
|
return Padding(
|
|
padding:
|
|
padding ?? const EdgeInsets.symmetric(vertical: 2.0, horizontal: 6.0),
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(12.0),
|
|
gradient: LinearGradient(
|
|
colors: [color, color.withOpacity(.75)],
|
|
),
|
|
),
|
|
child: Material(
|
|
type: MaterialType.transparency,
|
|
borderRadius: BorderRadius.circular(12.0),
|
|
child: ListTile(
|
|
contentPadding:
|
|
const EdgeInsets.symmetric(vertical: 4.0, horizontal: 16.0),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12.0)),
|
|
leading: Text(
|
|
averageText,
|
|
style: TextStyle(
|
|
color: textColor,
|
|
fontWeight: FontWeight.bold,
|
|
fontSize: 24.0,
|
|
),
|
|
),
|
|
title: Text.rich(
|
|
TextSpan(
|
|
text: title,
|
|
children: [
|
|
TextSpan(
|
|
text: " • ${grades.length}",
|
|
style: TextStyle(
|
|
color: textColor.withOpacity(.75),
|
|
fontWeight: FontWeight.w600,
|
|
fontSize: 16.0,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
style: TextStyle(
|
|
color: textColor,
|
|
fontWeight: FontWeight.w700,
|
|
fontSize: 18.0,
|
|
),
|
|
),
|
|
trailing: Icon(FeatherIcons.arrowRight, color: textColor),
|
|
onTap: () => CertificationView.show(grades,
|
|
context: context, gradeType: gradeType),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
String getGradeTypeTitle(GradeType gradeType) {
|
|
String title;
|
|
|
|
switch (gradeType) {
|
|
case GradeType.halfYear:
|
|
title = "mid".i18n;
|
|
break;
|
|
case GradeType.firstQ:
|
|
title = "1q".i18n;
|
|
break;
|
|
case GradeType.secondQ:
|
|
title = "2q".i18n;
|
|
break;
|
|
case GradeType.thirdQ:
|
|
title = "3q".i18n;
|
|
break;
|
|
case GradeType.fourthQ:
|
|
title = "4q".i18n;
|
|
break;
|
|
default:
|
|
title = "final".i18n;
|
|
}
|
|
|
|
return title;
|
|
}
|