1
0
forked from firka/firka

fix: grade chart design and indicate latest average

This commit is contained in:
checkedear
2026-06-13 02:08:01 +02:00
parent 7747e5d90b
commit 7167bf8da4
2 changed files with 43 additions and 39 deletions

View File

@@ -6,6 +6,8 @@ import 'package:firka/data/models/app_settings_model.dart';
import 'package:firka/services/live_activity_service.dart';
import 'package:firka/l10n/app_localizations.dart';
import 'package:firka/ui/shared/firka_icon.dart';
import 'package:firka_common/firka_common.dart' as common;
import 'package:firka_common/ui/theme/style.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:isar_community/isar.dart';
@@ -715,6 +717,34 @@ class SettingsStore {
await item.load(model);
}
}
int roundGrade(num grade) {
final rounding = group(
"settings",
).subGroup("application").subGroup("rounding");
return common.roundGrade(
grade,
t1: rounding.dbl("1"),
t2: rounding.dbl("2"),
t3: rounding.dbl("3"),
t4: rounding.dbl("4"),
);
}
Color getGradeColor(num grade) {
switch (roundGrade(grade)) {
case 2:
return appStyle.colors.grade2;
case 3:
return appStyle.colors.grade3;
case 4:
return appStyle.colors.grade4;
case 5:
return appStyle.colors.grade5;
default:
return appStyle.colors.grade1;
}
}
}
extension SettingExt on LinkedHashMap<String, SettingsItem> {

View File

@@ -139,7 +139,10 @@ class _GradeChartState extends State<GradeChart> {
final date = spots[_touchedIndex!].date;
content = tooltipFormat.format(date);
} else if (value == firstX) {
content = DateFormat("MMMM", initData.l10n.localeName).format(DateTime(DateTime.now().year, DateTime.september)).firstUpper();
content = DateFormat(
"MMMM",
initData.l10n.localeName,
).format(DateTime.now().copyWith(month: DateTime.september)).firstUpper();
} else if (value == lastX && !shouldHideNow) {
content = initData.l10n.now;
}
@@ -188,39 +191,17 @@ class _GradeChartState extends State<GradeChart> {
}
Color colorForY(double y) {
final rounding = initData.settings
.group("settings")
.subGroup("application")
.subGroup("rounding");
return y == 0
? appStyle.colors.card
: getGradeColor(
y,
t1: rounding.dbl("1"),
t2: rounding.dbl("2"),
t3: rounding.dbl("3"),
t4: rounding.dbl("4"),
);
return y == 0 ? appStyle.colors.card : initData.settings.getGradeColor(y);
}
Widget leftTitleWidgets(double value, TitleMeta meta) {
if (value == 0) {
if (value == 0 || value > 5) {
return SizedBox();
}
final rounding = initData.settings
.group("settings")
.subGroup("application")
.subGroup("rounding");
final currentValue = spots.first.y == 0
final currentValue = spots.last.y == 0
? 0
: roundGrade(
_tooltipY ?? spots.first.y,
t1: rounding.dbl("1"),
t2: rounding.dbl("2"),
t3: rounding.dbl("3"),
t4: rounding.dbl("4"),
);
: initData.settings.roundGrade(_tooltipY ?? spots.last.y);
final isActive = value == currentValue;
if (isActive) {
@@ -294,23 +275,16 @@ class _GradeChartState extends State<GradeChart> {
},
),
backgroundColor: Colors.transparent,
extraLinesData: ExtraLinesData(
horizontalLines: [
HorizontalLine(
y: 5,
color: const Color(0xFFC8C8C8),
strokeWidth: 1.0,
dashArray: [8, 12],
),
],
extraLinesOnTop: false,
),
gridData: FlGridData(
show: true,
drawHorizontalLine: true,
drawVerticalLine: false,
horizontalInterval: 1,
getDrawingHorizontalLine: (value) {
if (_tooltipY != null &&
initData.settings.roundGrade(_tooltipY!) == value) {
return FlLine(color: const Color(0xFFC8C8C8), strokeWidth: 1.0);
}
return FlLine(
color: const Color(0xFFC8C8C8),
strokeWidth: 1.0,
@@ -351,7 +325,7 @@ class _GradeChartState extends State<GradeChart> {
borderData: FlBorderData(show: false),
minY: 0,
maxY: 5,
maxY: 5.0000000000001,
lineBarsData: [
LineChartBarData(