diff --git a/lib/branding.dart b/lib/branding.dart index 85b2fa72f121b7283f3221a137e051e03235ebde..cfdb250ecb7114490bf29a63358448687b70c636 100644 --- a/lib/branding.dart +++ b/lib/branding.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; const appName = 'Better Untis'; // final scheme = ColorScheme.fromSwatch(primarySwatch: Colors.blue); final scheme = ColorScheme.fromSeed(seedColor: Colors.pink); +const passedTimeOverlayColor = Colors.black26; final theme = ThemeData( colorScheme: scheme, diff --git a/lib/timetable/time_indicator.dart b/lib/timetable/time_indicator.dart index 3c84b8fd223ac89798e5a495273a125e02fa1799..b370ba3f86805f1d8ad31a81f995d724aca0d1af 100644 --- a/lib/timetable/time_indicator.dart +++ b/lib/timetable/time_indicator.dart @@ -1,29 +1,41 @@ +import 'dart:math'; + import 'package:flutter/material.dart'; +import '../branding.dart'; import '../untis/lesson.dart'; import 'lesson.dart'; class TimeIndicator extends StatefulWidget { - const TimeIndicator({super.key}); + static const double indicatorHeightPx = 2; + final int progressInMinutes; + + const TimeIndicator({super.key, required this.progressInMinutes}); @override State<TimeIndicator> createState() => _TimeIndicatorState(); } class _TimeIndicatorState extends State<TimeIndicator> { + int get clampedMinutes => + min(widget.progressInMinutes, UntisLesson.endOfDay.inMinutes); + double get yPosition => - LessonWidget.zoom * - (TimeOfDay.now().inMinutes - UntisLesson.startOfDay.inMinutes); + LessonWidget.zoom * (clampedMinutes - UntisLesson.startOfDay.inMinutes); @override Widget build(BuildContext context) { - return Transform.translate( - offset: Offset(0, yPosition), - child: Container( - width: double.infinity, - height: 2, - color: Theme.of(context).colorScheme.primaryContainer, - ), + return Column( + children: [ + Container( + color: passedTimeOverlayColor, + height: max(0, yPosition - TimeIndicator.indicatorHeightPx), + ), + Container( + height: TimeIndicator.indicatorHeightPx, + color: Theme.of(context).colorScheme.primaryContainer, + ), + ], ); } } diff --git a/lib/timetable/timetable.dart b/lib/timetable/timetable.dart index 56e2be365c10f9433ad3fdf774fb02a7e91c68b2..a2356e9bca550997d0e8e86a2bc8cbe2f18fd143 100644 --- a/lib/timetable/timetable.dart +++ b/lib/timetable/timetable.dart @@ -68,7 +68,8 @@ class _TimetableState extends State<Timetable> { } DateTime getDateAtWeekdayIndex(int index) { - final monday = DateTime.now().atStartOfWeek(); + final dateInWeek = widget.data?.date ?? DateTime.now(); + final monday = dateInWeek.atStartOfWeek(); return monday.add(Duration(days: index)); } diff --git a/lib/timetable/weekday_content.dart b/lib/timetable/weekday_content.dart index 3e5f75e35af6a8ae6df15df11740976bafd402d7..5754a3e24fdab69cab7346113bc520bc6e29fbdf 100644 --- a/lib/timetable/weekday_content.dart +++ b/lib/timetable/weekday_content.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import '../context.dart'; @@ -15,11 +13,8 @@ class WeekdayContent extends StatelessWidget { final List<FloatingLesson> floatingLessons; final AppContext appContext; - int get latestLessonEnd => - lessons.isEmpty ? 0 : lessons.map((e) => e.endMinutes).reduce(max); - - bool get showTimeIndicator => - date.atStartOfDay() == DateTime.now().atStartOfDay(); + int get progressInMinutes => + DateTime.now().difference(date.atStartOfDay()).inMinutes; WeekdayContent({ super.key, @@ -38,7 +33,9 @@ class WeekdayContent extends StatelessWidget { @override Widget build(BuildContext context) { return SizedBox( - height: latestLessonEnd * LessonWidget.zoom, + height: + (UntisLesson.endOfDay.inMinutes - UntisLesson.startOfDay.inMinutes) * + LessonWidget.zoom, child: Stack( children: [ ...floatingLessons.map((lesson) => LessonWidget( @@ -46,7 +43,11 @@ class WeekdayContent extends StatelessWidget { floatingLesson: lesson, appContext: appContext, )), - if (showTimeIndicator) const TimeIndicator(), + IgnorePointer( + child: TimeIndicator( + progressInMinutes: progressInMinutes, + ), + ), ], ), ); diff --git a/lib/untis/lesson.dart b/lib/untis/lesson.dart index a37d04626bd7d472a979532be5c1400b5a027fc5..9513bd89ba120246f104df7a4506c532bbc4375e 100644 --- a/lib/untis/lesson.dart +++ b/lib/untis/lesson.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import '../util/serializable.dart'; import 'element.dart'; import 'lecture.dart'; +import 'period.dart'; import 'room.dart'; import 'teacher.dart'; @@ -55,7 +56,8 @@ class Lesson { } class UntisLesson extends Lesson with UntisMixin { - static const startOfDay = TimeOfDay(hour: 8, minute: 0); + static final startOfDay = Period.defaultPeriods.first.start; + static final endOfDay = Period.defaultPeriods.last.end; @override final Json json;