Skip to content
Snippets Groups Projects
Commit c18985e8 authored by doodlezucc's avatar doodlezucc
Browse files

introduce overlay time indicator

parent 5c1bf763
No related branches found
No related tags found
No related merge requests found
......@@ -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,
......
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,
),
],
);
}
}
......@@ -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));
}
......
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,
),
),
],
),
);
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment