tt: add tests

This commit is contained in:
2025-08-30 15:23:34 +02:00
parent cd35b2f314
commit 4db98d123f
3 changed files with 54 additions and 6 deletions

View File

@@ -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<HomeTimetableScreen> {
List<Lesson>? lessons;
List<Lesson>? events;
List<Test>? tests;
List<DateTime>? dates;
DateTime? now;
int active = 0;
@@ -49,6 +51,7 @@ class _HomeTimetableScreen extends State<HomeTimetableScreen> {
var lessonsResp = await widget.data.client
.getTimeTable(monday, sunday, forceCache: forceCache);
var testsResp = await widget.data.client.getTests(forceCache: forceCache);
List<DateTime> dates = List.empty(growable: true);
if (lessonsResp.response != null) {
@@ -58,6 +61,7 @@ class _HomeTimetableScreen extends State<HomeTimetableScreen> {
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<HomeTimetableScreen> {
@override
Widget build(BuildContext context) {
if (lessons != null && events != null && dates != null) {
if (lessons != null && tests != null && events != null && dates != null) {
List<Widget> ttWidgets = [];
List<Widget> ttDays = [];
@@ -157,9 +161,14 @@ class _HomeTimetableScreen extends State<HomeTimetableScreen> {
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: [

View File

@@ -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;

View File

@@ -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<Lesson> lessons;
final List<Lesson> events;
final List<Test> 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));
}
}