From 87e333142835d33dfe190a7f1e8bba3341973269 Mon Sep 17 00:00:00 2001 From: checkedear <271323618+checkedear@users.noreply.github.com> Date: Tue, 9 Jun 2026 12:48:16 +0200 Subject: [PATCH] revert: rounded subject average --- .../lib/ui/phone/pages/home/home_grades.dart | 34 +++++++++++++++++++ .../lib/ui/components/grade_helpers.dart | 21 ++++++++++++ 2 files changed, 55 insertions(+) diff --git a/firka/lib/ui/phone/pages/home/home_grades.dart b/firka/lib/ui/phone/pages/home/home_grades.dart index 2753cc6..ce645ec 100644 --- a/firka/lib/ui/phone/pages/home/home_grades.dart +++ b/firka/lib/ui/phone/pages/home/home_grades.dart @@ -114,6 +114,7 @@ class _HomeGradesScreen extends FirkaState { final allLessons = lessons!.response!; final subjectAverage = allGrades.getSubjectAverage(); + final roundedSubjectAverage = allGrades.getRoundedSubjectAverage(); final classAverages = classAvgs!.response! .map((c) => c.classGroupAverage) .nonNulls; @@ -223,6 +224,39 @@ class _HomeGradesScreen extends FirkaState { ), ], ), + FirkaCard( + left: [ + Text( + widget.data.l10n.subject_avg_rounded, + style: appStyle.fonts.B_16SB.apply( + color: appStyle.colors.textPrimary, + ), + ), + ], + right: [ + if (roundedSubjectAverage != null) + Container( + width: 48, + height: 26, + decoration: ShapeDecoration( + color: getGradeColor( + roundedSubjectAverage, + ).withAlpha(38), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: Center( + child: Text( + roundedSubjectAverage.toStringAsFixed(2), + style: appStyle.fonts.B_16R.apply( + color: getGradeColor(roundedSubjectAverage), + ), + ), + ), + ), + ], + ), FirkaCard( left: [ Text( diff --git a/firka_common/lib/ui/components/grade_helpers.dart b/firka_common/lib/ui/components/grade_helpers.dart index d0cdddf..0110060 100644 --- a/firka_common/lib/ui/components/grade_helpers.dart +++ b/firka_common/lib/ui/components/grade_helpers.dart @@ -64,6 +64,27 @@ extension GradeListExtension on Iterable { ).getAverage(); } + double? getRoundedSubjectAverage({ + double t1 = 1, + double t2 = 0.5, + double t3 = 0.5, + double t4 = 0.5, + }) { + final averages = map((g) => g.subject).toSet().map((subject) { + final average = getAverageBySubject(subject); + if (average == null) { + return null; + } + return roundGrade(average, t1: t1, t2: t2, t3: t3, t4: t4); + }).nonNulls; + + if (averages.isEmpty) { + return null; + } + + return averages.reduce((sum, avg) => sum + avg) / averages.length; + } + double? getSubjectAverage() { final averages = map( (g) => g.subject,