diff --git a/lib/fetching/timetable.dart b/lib/fetching/timetable.dart index cc7bfa8fdd68121832af8a95229693d65e60eba4..6c31f25d85d0da5b3eb98c62b6dd1d1ccb7c7ac8 100644 --- a/lib/fetching/timetable.dart +++ b/lib/fetching/timetable.dart @@ -95,6 +95,7 @@ class CacheableTimetable extends Cacheable<TimetableData> { } return TimetableData( + date: date, lessons: timetableLessons, rooms: rooms.values.toSet(), teachers: teachers.values.toSet(), diff --git a/lib/timetable/timetable.dart b/lib/timetable/timetable.dart index 78f938aa1bc6a98e1f91eb52c98670b6dd7f7805..56e2be365c10f9433ad3fdf774fb02a7e91c68b2 100644 --- a/lib/timetable/timetable.dart +++ b/lib/timetable/timetable.dart @@ -8,6 +8,7 @@ import '../untis/lecture.dart'; import '../untis/lesson.dart'; import '../untis/period.dart'; import '../untis/timetable.dart'; +import '../util/date_extension.dart'; import '../util/listenable.dart'; import 'period_background.dart'; import 'weekday_content.dart'; @@ -66,17 +67,20 @@ class _TimetableState extends State<Timetable> { : mergeLessons(_getLessonsOfDay(index), profile.hiddenLectures); } + DateTime getDateAtWeekdayIndex(int index) { + final monday = DateTime.now().atStartOfWeek(); + + return monday.add(Duration(days: index)); + } + @override Widget build(BuildContext context) { return Column( children: [ Row( children: List.generate(Timetable.weekdayCount, (index) { - final now = DateTime.now(); - final currentWeekday = now.weekday; - final monday = now.subtract(Duration(days: currentWeekday - 1)); + final indexedDay = getDateAtWeekdayIndex(index); - final indexedDay = monday.add(Duration(days: index)); return Expanded( child: WeekdayHeader( date: indexedDay, @@ -104,12 +108,11 @@ class _TimetableState extends State<Timetable> { crossAxisAlignment: CrossAxisAlignment.start, children: List.generate(Timetable.weekdayCount, (index) { final lessons = getMergedLessonsOfDay(index); - final isCurrentDay = - DateTime.now().weekday - 1 == index; + final date = getDateAtWeekdayIndex(index); return Expanded( child: WeekdayContent( - showTimeIndicator: isCurrentDay, + date: date, lessons: lessons, appContext: widget.appContext, ), diff --git a/lib/timetable/weekday_content.dart b/lib/timetable/weekday_content.dart index 8c784262fede7638b5119c6e9a2fd1cd3fca28f0..3e5f75e35af6a8ae6df15df11740976bafd402d7 100644 --- a/lib/timetable/weekday_content.dart +++ b/lib/timetable/weekday_content.dart @@ -3,13 +3,14 @@ import 'dart:math'; import 'package:flutter/material.dart'; import '../context.dart'; +import '../util/date_extension.dart'; import '../util/simultaneous.dart'; import '../untis/lesson.dart'; import 'lesson.dart'; import 'time_indicator.dart'; class WeekdayContent extends StatelessWidget { - final bool showTimeIndicator; + final DateTime date; final List<Lesson> lessons; final List<FloatingLesson> floatingLessons; final AppContext appContext; @@ -17,9 +18,12 @@ class WeekdayContent extends StatelessWidget { int get latestLessonEnd => lessons.isEmpty ? 0 : lessons.map((e) => e.endMinutes).reduce(max); + bool get showTimeIndicator => + date.atStartOfDay() == DateTime.now().atStartOfDay(); + WeekdayContent({ super.key, - required this.showTimeIndicator, + required this.date, required this.lessons, required this.appContext, }) : floatingLessons = solveSimultaneous( diff --git a/lib/untis/lesson.dart b/lib/untis/lesson.dart index fd09b104d68f8299b11e6be62221cd674fad28dd..a37d04626bd7d472a979532be5c1400b5a027fc5 100644 --- a/lib/untis/lesson.dart +++ b/lib/untis/lesson.dart @@ -65,13 +65,10 @@ class UntisLesson extends Lesson with UntisMixin { UntisLesson( this.json, { - required Lecture lecture, - required Set<Room> rooms, - required Set<Teacher> teachers, + required super.lecture, + required super.rooms, + required super.teachers, }) : super( - lecture: lecture, - rooms: rooms, - teachers: teachers, date: _parseDate(json['date']), start: _parseTime(json['startTime']), end: _parseTime(json['endTime']), diff --git a/lib/untis/timetable.dart b/lib/untis/timetable.dart index c0617b84590675e329c4aea5bd5bd3c007e206af..d9bb48fc370e8e429ac04efc378d747fff8f4494 100644 --- a/lib/untis/timetable.dart +++ b/lib/untis/timetable.dart @@ -1,20 +1,28 @@ +import '../util/date_extension.dart'; import 'lesson.dart'; import 'room.dart'; import 'teacher.dart'; class TimetableData { + final DateTime date; final Set<UntisLesson> lessons; final Set<Teacher> teachers; final Set<Room> rooms; TimetableData({ + required this.date, required this.lessons, required this.teachers, required this.rooms, }); static TimetableData merge(TimetableData a, TimetableData b) { + if (a.date.atStartOfWeek() != b.date.atStartOfWeek()) { + throw StateError('Timetables are from different weeks'); + } + return TimetableData( + date: a.date, lessons: a.lessons.union(b.lessons), teachers: a.teachers.union(b.teachers), rooms: a.rooms.union(b.rooms),