From 69a3090f16079353be9718e297d942ef2dffde02 Mon Sep 17 00:00:00 2001 From: 55nknown <55922348+55nknown@users.noreply.github.com> Date: Mon, 31 Oct 2022 05:07:38 +0100 Subject: [PATCH] surprise grades --- filcnaplo/assets/animations/backpack-2.riv | Bin 0 -> 6075 bytes filcnaplo/lib/database/init.dart | 2 +- filcnaplo/lib/ui/filter/widgets.dart | 10 +++++-- filcnaplo/lib/ui/filter/widgets/grades.dart | 24 ++++++++++++++-- .../lib/ui/widgets/grade/grade_tile.dart | 27 +++++++++++++++--- filcnaplo/pubspec.yaml | 4 ++- filcnaplo_mobile_ui | 2 +- 7 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 filcnaplo/assets/animations/backpack-2.riv diff --git a/filcnaplo/assets/animations/backpack-2.riv b/filcnaplo/assets/animations/backpack-2.riv new file mode 100644 index 0000000000000000000000000000000000000000..68282dcaee11690e30408ee5b1e1c8b98c2bf144 GIT binary patch literal 6075 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 literal 0 HcmV?d00001 diff --git a/filcnaplo/lib/database/init.dart b/filcnaplo/lib/database/init.dart index b947ef8..1e07402 100644 --- a/filcnaplo/lib/database/init.dart +++ b/filcnaplo/lib/database/init.dart @@ -63,7 +63,7 @@ Future initDB() async { "grades": "[]", "timetable": "[]", "exams": "[]", "homework": "[]", "messages": "[]", "notes": "[]", "events": "[]", "absences": "[]", "group_averages": "[]", // "subject_lesson_count": "{}", // non kreta data - "last_seen_grade": "0", + "last_seen_grade": 0, }); } catch (error) { print("ERROR: migrateDB: $error"); diff --git a/filcnaplo/lib/ui/filter/widgets.dart b/filcnaplo/lib/ui/filter/widgets.dart index 8dfbbce..b2f75ef 100644 --- a/filcnaplo/lib/ui/filter/widgets.dart +++ b/filcnaplo/lib/ui/filter/widgets.dart @@ -27,7 +27,7 @@ import 'package:provider/provider.dart'; const List homeFilters = [FilterType.all, FilterType.grades, FilterType.messages, FilterType.absences]; -enum FilterType { all, grades, messages, absences, homework, exams, notes, events, lessons, updates, certifications, missedExams } +enum FilterType { all, grades, newGrades, messages, absences, homework, exams, notes, events, lessons, updates, certifications, missedExams } Future> getFilterWidgets(FilterType activeData, {bool absencesNoExcused = false, required BuildContext context}) async { final gradeProvider = Provider.of(context); @@ -62,7 +62,13 @@ Future> getFilterWidgets(FilterType activeData, {bool absencesN // Grades case FilterType.grades: - items = grade_filter.getWidgets(gradeProvider.grades); + items = grade_filter.getWidgets(gradeProvider.grades, gradeProvider.lastSeenDate); + items.addAll(await getFilterWidgets(FilterType.newGrades, context: context)); + break; + + // Grades + case FilterType.newGrades: + items = grade_filter.getNewWidgets(gradeProvider.grades, gradeProvider.lastSeenDate); break; // Certifications diff --git a/filcnaplo/lib/ui/filter/widgets/grades.dart b/filcnaplo/lib/ui/filter/widgets/grades.dart index 4092607..111826b 100644 --- a/filcnaplo/lib/ui/filter/widgets/grades.dart +++ b/filcnaplo/lib/ui/filter/widgets/grades.dart @@ -2,12 +2,13 @@ import 'package:filcnaplo/ui/date_widget.dart'; import 'package:filcnaplo/utils/platform.dart'; import 'package:filcnaplo_kreta_api/models/grade.dart'; import 'package:filcnaplo_mobile_ui/common/widgets/grade/grade_viewable.dart' as mobile; +import 'package:filcnaplo_mobile_ui/common/widgets/grade/new_grades.dart' as mobile; import 'package:filcnaplo_desktop_ui/common/widgets/grade/grade_viewable.dart' as desktop; -List getWidgets(List providerGrades) { +List getWidgets(List providerGrades, DateTime? lastSeenDate) { List items = []; for (var grade in providerGrades) { - if (grade.type == GradeType.midYear) { + if (grade.type == GradeType.midYear && !(lastSeenDate != null && grade.date.isAfter(lastSeenDate))) { items.add(DateWidget( key: grade.id, date: grade.date, @@ -17,3 +18,22 @@ List getWidgets(List providerGrades) { } return items; } + +List getNewWidgets(List providerGrades, DateTime? lastSeenDate) { + List items = []; + List newGrades = []; + for (var grade in providerGrades) { + if (grade.type == GradeType.midYear && !(lastSeenDate != null && !grade.date.isAfter(lastSeenDate))) { + newGrades.add(grade); + } + } + newGrades.sort((a, b) => a.date.compareTo(b.date)); + if (newGrades.isNotEmpty) { + items.add(DateWidget( + key: newGrades.last.id, + date: newGrades.last.date, + widget: mobile.NewGradesSurprise(newGrades), + )); + } + return items; +} diff --git a/filcnaplo/lib/ui/widgets/grade/grade_tile.dart b/filcnaplo/lib/ui/widgets/grade/grade_tile.dart index 117312f..7884946 100644 --- a/filcnaplo/lib/ui/widgets/grade/grade_tile.dart +++ b/filcnaplo/lib/ui/widgets/grade/grade_tile.dart @@ -120,11 +120,23 @@ class GradeTile extends StatelessWidget { } class GradeValueWidget extends StatelessWidget { - const GradeValueWidget(this.value, {Key? key, this.size = 38.0, this.fill = false, this.complemented = false}) : super(key: key); + const GradeValueWidget( + this.value, { + Key? key, + this.size = 38.0, + this.fill = false, + this.contrast = false, + this.shadow = false, + this.outline = false, + this.complemented = false, + }) : super(key: key); final GradeValue value; final double size; final bool fill; + final bool contrast; + final bool shadow; + final bool outline; final bool complemented; @override @@ -164,11 +176,11 @@ class GradeValueWidget extends StatelessWidget { style: TextStyle( fontWeight: value.weight == 50 ? FontWeight.w600 : FontWeight.bold, fontSize: size, - color: color, + color: contrast ? Colors.white : color, shadows: [ if (value.weight >= 200) Shadow( - color: color.withOpacity(.4), + color: (contrast ? Colors.white : color).withOpacity(.4), offset: const Offset(-4, -3), ) ], @@ -195,8 +207,15 @@ class GradeValueWidget extends StatelessWidget { width: size * 1.4, height: size * 1.4, decoration: BoxDecoration( - color: color.withOpacity(.25), + color: color.withOpacity(contrast ? 1.0 : .25), shape: BoxShape.circle, + boxShadow: [ + if (shadow) + BoxShadow( + color: color, + blurRadius: 62.0, + ) + ], ), child: Center(child: valueText), ) diff --git a/filcnaplo/pubspec.yaml b/filcnaplo/pubspec.yaml index de8b4ed..9a88042 100644 --- a/filcnaplo/pubspec.yaml +++ b/filcnaplo/pubspec.yaml @@ -51,6 +51,8 @@ dependencies: live_activities: ^1.0.0 animated_flip_counter: ^0.2.5 lottie: ^1.4.3 + rive: ^0.9.1 + animated_background: ^2.0.0 dev_dependencies: flutter_lints: ^2.0.1 @@ -64,7 +66,7 @@ flutter: assets: - assets/icons/ic_launcher.png - assets/icons/ic_splash.png - - assets/animations/bell-alert.json + - assets/animations/ fonts: - family: FilcIcons diff --git a/filcnaplo_mobile_ui b/filcnaplo_mobile_ui index a417359..99d8638 160000 --- a/filcnaplo_mobile_ui +++ b/filcnaplo_mobile_ui @@ -1 +1 @@ -Subproject commit a417359d1aa9405e6a6ae80a96c1c1451f390323 +Subproject commit 99d8638344cbe14184fbe7c4edd9bbf9513a077f