diff --git a/filcnaplo_mobile_ui/lib/pages/grades/graph.dart b/filcnaplo_mobile_ui/lib/pages/grades/graph.dart index f594693..4817268 100755 --- a/filcnaplo_mobile_ui/lib/pages/grades/graph.dart +++ b/filcnaplo_mobile_ui/lib/pages/grades/graph.dart @@ -26,6 +26,42 @@ class GradeGraph extends StatefulWidget { class GradeGraphState extends State { late SettingsProvider settings; + List getColors(List data) { + List colors = []; + List> sortedData = [[]]; + + // Sort by date descending + data.sort((a, b) => -a.writeDate.compareTo(b.writeDate)); + + // Sort data to points by treshold + for (var element in data) { + if (sortedData.last.isNotEmpty && + sortedData.last.last.writeDate.difference(element.writeDate).inDays > + widget.dayThreshold) { + sortedData.add([]); + } + for (var dataList in sortedData) { + dataList.add(element); + } + } + + // Create FlSpots from points + for (var dataList in sortedData) { + double average = AverageHelper.averageEvals(dataList); + + Color clr = average >= 1 && average <= 5 + ? ColorTween( + begin: settings.gradeColors[average.floor() - 1], + end: settings.gradeColors[average.ceil() - 1]) + .transform(average - average.floor())! + : Theme.of(context).colorScheme.secondary; + + colors.add(clr); + } + + return colors; + } + List getSpots(List data) { List subjectData = []; List> sortedData = [[]]; @@ -95,6 +131,7 @@ class GradeGraphState extends State { .transform(average - average.floor())! : Theme.of(context).colorScheme.secondary; + List averageColors = getColors(data); subjectSpots = getSpots(data); // naplo/#73 @@ -182,7 +219,7 @@ class GradeGraphState extends State { preventCurveOverShooting: true, spots: subjectSpots, isCurved: true, - colors: [averageColor], + colors: averageColors, barWidth: 8, isStrokeCapRound: true, dotData: FlDotData(show: false),