From 4db98d123f2474df5d05e1c5614aed0f843c83c0 Mon Sep 17 00:00:00 2001 From: Armand <4831c0@proton.me> Date: Sat, 30 Aug 2025 15:23:34 +0200 Subject: [PATCH] tt: add tests --- .../ui/phone/pages/home/home_timetable.dart | 15 +++++++-- firka/lib/ui/phone/widgets/lesson.dart | 33 ++++++++++++++++++- firka/lib/ui/phone/widgets/tt_day.dart | 12 +++++-- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/firka/lib/ui/phone/pages/home/home_timetable.dart b/firka/lib/ui/phone/pages/home/home_timetable.dart index dd57ac24..b259b4a1 100644 --- a/firka/lib/ui/phone/pages/home/home_timetable.dart +++ b/firka/lib/ui/phone/pages/home/home_timetable.dart @@ -1,4 +1,5 @@ import 'package:carousel_slider/carousel_slider.dart'; +import 'package:firka/helpers/api/model/test.dart'; import 'package:firka/helpers/api/model/timetable.dart'; import 'package:firka/helpers/debug_helper.dart'; import 'package:firka/helpers/extensions.dart'; @@ -36,6 +37,7 @@ class HomeTimetableScreen extends StatefulWidget { class _HomeTimetableScreen extends State { List? lessons; List? events; + List? tests; List? dates; DateTime? now; int active = 0; @@ -49,6 +51,7 @@ class _HomeTimetableScreen extends State { var lessonsResp = await widget.data.client .getTimeTable(monday, sunday, forceCache: forceCache); + var testsResp = await widget.data.client.getTests(forceCache: forceCache); List dates = List.empty(growable: true); if (lessonsResp.response != null) { @@ -58,6 +61,7 @@ class _HomeTimetableScreen extends State { events = lessonsResp.response ?.where((lesson) => lesson.type.name == TimetableConsts.event) .toList(); + tests = testsResp.response; for (var i = 0; i < 7; i++) { var t = monday.add(Duration(days: i)); @@ -133,7 +137,7 @@ class _HomeTimetableScreen extends State { @override Widget build(BuildContext context) { - if (lessons != null && events != null && dates != null) { + if (lessons != null && tests != null && events != null && dates != null) { List ttWidgets = []; List ttDays = []; @@ -157,9 +161,14 @@ class _HomeTimetableScreen extends State { lesson.start.isAfter(date.subtract(Duration(seconds: 1))) && lesson.end.isBefore(date.add(Duration(hours: 23, minutes: 59)))) .toList(); + final testsOnDate = tests! + .where((test) => + test.date.isAfter(date.subtract(Duration(seconds: 1))) && + test.date.isBefore(date.add(Duration(hours: 23, minutes: 59)))) + .toList(); - ttDays.add( - TimeTableDayWidget(widget.data, date, lessonsOnDate, eventsOnDate)); + ttDays.add(TimeTableDayWidget( + widget.data, date, lessonsOnDate, eventsOnDate, testsOnDate)); } return Stack(children: [ diff --git a/firka/lib/ui/phone/widgets/lesson.dart b/firka/lib/ui/phone/widgets/lesson.dart index c46c0f2a..3efd0b61 100644 --- a/firka/lib/ui/phone/widgets/lesson.dart +++ b/firka/lib/ui/phone/widgets/lesson.dart @@ -5,17 +5,22 @@ import 'package:firka/l10n/app_localizations.dart'; import 'package:firka/main.dart'; import 'package:firka/ui/model/style.dart'; import 'package:flutter/material.dart'; +import 'package:majesticons_flutter/majesticons_flutter.dart'; +import '../../../helpers/api/model/test.dart'; import '../../../helpers/api/model/timetable.dart'; import '../../widget/class_icon.dart'; +import '../../widget/firka_icon.dart'; class LessonWidget extends StatelessWidget { final AppInitialization data; final int? lessonNo; final Lesson lesson; + final Test? test; final Lesson? nextLesson; - const LessonWidget(this.data, this.lessonNo, this.lesson, this.nextLesson, + const LessonWidget( + this.data, this.lessonNo, this.lesson, this.test, this.nextLesson, {super.key}); @override @@ -114,6 +119,32 @@ class LessonWidget extends StatelessWidget { )); } + if (test != null && + data.settings + .group("settings") + .subGroup("timetable_toast") + .boolean("tests_and_homework")) { + elements.add(FirkaCard( + left: [ + FirkaIconWidget( + FirkaIconType.majesticons, + Majesticon.editPen4Solid, + color: appStyle.colors.accent, + ), + SizedBox(width: 6), + Text(test!.theme, + style: appStyle.fonts.B_14SB + .apply(color: appStyle.colors.textSecondary)) + ], + right: [ + Text(test!.method.description ?? "N/A", + style: appStyle.fonts.B_14R + .apply(color: appStyle.colors.textTertiary)) + ], + )); + elements.add(SizedBox(height: 4)); + } + if (nextLesson != null) { elements.add(SizedBox(height: 4)); var breakMins = nextLesson!.start.difference(lesson.end).inMinutes; diff --git a/firka/lib/ui/phone/widgets/tt_day.dart b/firka/lib/ui/phone/widgets/tt_day.dart index 0fb2c763..91d4ef72 100644 --- a/firka/lib/ui/phone/widgets/tt_day.dart +++ b/firka/lib/ui/phone/widgets/tt_day.dart @@ -1,3 +1,4 @@ +import 'package:firka/helpers/api/model/test.dart'; import 'package:firka/helpers/api/model/timetable.dart'; import 'package:firka/helpers/extensions.dart'; import 'package:firka/helpers/ui/firka_card.dart'; @@ -12,8 +13,10 @@ class TimeTableDayWidget extends StatelessWidget { final DateTime date; final List lessons; final List events; + final List tests; - const TimeTableDayWidget(this.data, this.date, this.lessons, this.events, + const TimeTableDayWidget( + this.data, this.date, this.lessons, this.events, this.tests, {super.key}); @override @@ -41,7 +44,12 @@ class TimeTableDayWidget extends StatelessWidget { var lesson = lessons[i]; Lesson? nextLesson = lessons.length > i + 1 ? lessons[i + 1] : null; ttBody.add(LessonWidget( - data, lessons.getLessonNo(lesson), lesson, nextLesson)); + data, + lessons.getLessonNo(lesson), + lesson, + tests.firstWhereOrNull( + (test) => test.lessonNumber == lesson.lessonNumber), + nextLesson)); } }