diff --git a/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_planner_screen.dart b/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_planner_screen.dart index d706922..f3dfb08 100644 --- a/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_planner_screen.dart +++ b/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_planner_screen.dart @@ -226,7 +226,7 @@ class _GoalPlannerScreenState extends State { if (groupAverage != 0) AverageDisplay(average: groupAverage, border: true), const SizedBox(width: 6.0), - AverageDisplay(average: avg) + AverageDisplay(average: avg), ], ), ], diff --git a/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_state_screen.dart b/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_state_screen.dart index b843c1e..19e5d3b 100644 --- a/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_state_screen.dart +++ b/filcnaplo_premium/lib/ui/mobile/goal_planner/goal_state_screen.dart @@ -6,16 +6,19 @@ import 'package:filcnaplo/models/settings.dart'; import 'package:filcnaplo_kreta_api/models/grade.dart'; import 'package:filcnaplo_kreta_api/models/subject.dart'; import 'package:filcnaplo_kreta_api/providers/grade_provider.dart'; +import 'package:filcnaplo_mobile_ui/common/average_display.dart'; import 'package:filcnaplo_mobile_ui/common/panel/panel.dart'; import 'package:filcnaplo_mobile_ui/common/progress_bar.dart'; import 'package:filcnaplo_mobile_ui/common/round_border_icon.dart'; import 'package:filcnaplo_premium/ui/mobile/goal_planner/goal_planner.dart'; import 'package:filcnaplo_premium/ui/mobile/goal_planner/goal_state_screen.i18n.dart'; import 'package:filcnaplo_premium/ui/mobile/goal_planner/route_option.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:provider/provider.dart'; +import 'goal_planner_screen.dart'; import 'graph.dart'; class GoalStateScreen extends StatefulWidget { @@ -36,6 +39,7 @@ class _GoalStateScreenState extends State { double currAvg = 0.0; double goalAvg = 0.0; double beforeAvg = 0.0; + double afterAvg = 0.0; double avgDifference = 0; Plan? plan; @@ -73,7 +77,10 @@ class _GoalStateScreenState extends State { setState(() {}); } - List getSubjectGrades(Subject subject) => gradeProvider.grades + List getSubjectGrades(Subject subject) => + gradeProvider.grades.where((e) => (e.subject == subject)).toList(); + + List getAfterGoalGrades(Subject subject) => gradeProvider.grades .where((e) => (e.subject == subject && e.date.isAfter(goalPinDate))) .toList(); @@ -94,9 +101,12 @@ class _GoalStateScreenState extends State { gradeProvider = Provider.of(context); settingsProvider = Provider.of(context); - List subjectGrades = getSubjectGrades(widget.subject).toList(); + var subjectGrades = getSubjectGrades(widget.subject).toList(); currAvg = AverageHelper.averageEvals(subjectGrades); + var afterGoalGrades = getAfterGoalGrades(widget.subject).toList(); + afterAvg = AverageHelper.averageEvals(afterGoalGrades); + Color averageColor = currAvg >= 1 && currAvg <= 5 ? ColorTween( begin: settingsProvider.gradeColors[currAvg.floor() - 1], @@ -115,8 +125,8 @@ class _GoalStateScreenState extends State { children: [ Container( padding: const EdgeInsets.only(top: 16.0, right: 12.0), - child: - GoalGraph(subjectGrades, dayThreshold: 5, classAvg: goalAvg), + child: GoalGraph(afterGoalGrades, + dayThreshold: 5, classAvg: goalAvg), ), const SizedBox(height: 5.0), Padding( @@ -249,6 +259,8 @@ class _GoalStateScreenState extends State { fontSize: 20.0, ), ), + const SizedBox(width: 5.0), + AverageDisplay(average: beforeAvg), ], ), Row( @@ -260,6 +272,10 @@ class _GoalStateScreenState extends State { fontSize: 20.0, ), ), + const SizedBox(width: 5.0), + AverageDisplay(average: currAvg), + const SizedBox(width: 5.0), + // ide majd kell average difference ], ), ], @@ -284,7 +300,13 @@ class _GoalStateScreenState extends State { ), ), RawMaterialButton( - onPressed: () async {}, + onPressed: () async { + Navigator.of(context).push( + CupertinoPageRoute( + builder: (context) => + GoalPlannerScreen( + subject: widget.subject))); + }, fillColor: Colors.black, shape: const StadiumBorder(), padding: const EdgeInsets.symmetric( @@ -321,16 +343,23 @@ class _GoalStateScreenState extends State { ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(45.0), - color: Colors.greenAccent.shade700 - .withOpacity(.15), + color: avgDifference.isNegative + ? Colors.redAccent.shade400 + .withOpacity(.15) + : Colors.greenAccent.shade700 + .withOpacity(.15), ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon( - FeatherIcons.chevronUp, - color: Colors.greenAccent.shade700, + avgDifference.isNegative + ? FeatherIcons.chevronDown + : FeatherIcons.chevronUp, + color: avgDifference.isNegative + ? Colors.redAccent.shade400 + : Colors.greenAccent.shade700, size: 18.0, ), const SizedBox(width: 5.0), @@ -339,7 +368,9 @@ class _GoalStateScreenState extends State { '%', textAlign: TextAlign.center, style: TextStyle( - color: Colors.greenAccent.shade700, + color: avgDifference.isNegative + ? Colors.redAccent.shade400 + : Colors.greenAccent.shade700, fontSize: 22.0, height: 0.8, fontWeight: FontWeight.w500,