From 240e457fb5d2b49bd39310ad2f540cecdb7a60a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Tue, 21 Feb 2023 23:59:39 +0100 Subject: [PATCH] Added additional Timetable information and coloring --- lib/screen/pages/timetable/weekView.dart | 75 +++++++++++++++++++++--- 1 file changed, 68 insertions(+), 7 deletions(-) diff --git a/lib/screen/pages/timetable/weekView.dart b/lib/screen/pages/timetable/weekView.dart index 2bf04e2..c4baefb 100644 --- a/lib/screen/pages/timetable/weekView.dart +++ b/lib/screen/pages/timetable/weekView.dart @@ -44,9 +44,69 @@ class _WeekViewState extends State { Widget build(BuildContext context) { return TimetableView( laneEventsList: _buildLaneEvents(widget.value), - onEventTap: (TableEvent event) {}, + onEventTap: (TableEvent event) { + + try { + GetTimetableResponseObject timetableData = widget.value.getTimetableResponse.result.firstWhere((element) => element.id == event.eventId); + GetSubjectsResponseObject subject = widget.value.getSubjectsResponse.result.firstWhere((subject) => subject.id == timetableData.su[0]['id']); + GetRoomsResponseObject room = widget.value.getRoomsResponse.result.firstWhere((room) => room.id == timetableData.ro[0]['id']); + + showModalBottomSheet(context: context, builder: (context) => Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(vertical: 30), + child: Center( + child: Column( + children: [ + Icon(Icons.info), + SizedBox(height: 10), + Text("${subject.alternateName} - (${subject.longName})", style: const TextStyle(fontSize: 30)), + Text("${Jiffy(event.startTime).format("HH:mm")} - ${Jiffy(event.endTime).format("HH:mm")}", style: const TextStyle(fontSize: 15)), + ], + ), + ), + ), + + Expanded( + child: ListView( + children: [ + ListTile( + leading: const Icon(Icons.notifications_active), + title: Text("Status: ${timetableData.code != null ? "Entfällt" : "Findet statt"}"), + ), + ListTile( + leading: const Icon(Icons.room), + title: Text("Raum: ${room.name}"), + trailing: const Icon(Icons.house_outlined), + ), + ListTile( + leading: const Icon(Icons.person), + title: Text("Lehrkraft: (${timetableData.te[0]['name']}) ${timetableData.te[0]['longname']}"), + trailing: const Icon(Icons.textsms_outlined), + ), + ListTile( + leading: const Icon(Icons.abc), + title: Text("Typ: ${timetableData.activityType}"), + ), + ListTile( + leading: const Icon(Icons.people), + title: Text("Klasse(n): ${timetableData.kl.map((e) => e['name']).join(", ")}"), + ) + ], + ), + ) + ], + )); + + + } on StateError { + return; + } + }, timetableStyle: CustomTableStyle(context), - onEmptySlotTap: (int laneIndex, TableEventTime start, TableEventTime end) => {}, + onEmptySlotTap: (int laneIndex, TableEventTime start, TableEventTime end) => { + + }, ); } @@ -79,7 +139,7 @@ class _WeekViewState extends State { startTime: parseTime(0800), endTime: parseTime(1500), padding: const EdgeInsets.all(5), - backgroundColor: Theme.of(context).disabledColor, + backgroundColor: Colors.indigoAccent, location: "\n${holidayInfo.longName}", ) ]), @@ -94,10 +154,8 @@ class _WeekViewState extends State { //Every Day List events = List.generate( - timetable.result.where((element) => element.date == day).length, - (index) { + timetable.result.where((element) => element.date == day).length, (index) { GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index); - GetSubjectsResponseObject subject = subjects.result.firstWhere((subject) => subject.id == tableEvent.su[0]['id']); return TableEvent( @@ -108,6 +166,7 @@ class _WeekViewState extends State { endTime: parseTime(tableEvent.endTime), padding: const EdgeInsets.all(5), backgroundColor: getEventColor( + tableEvent.code ?? "", currentDay.add(Duration(hours: parseTime(tableEvent.startTime).hour, minutes: parseTime(tableEvent.startTime).minute)), currentDay.add(Duration(hours: parseTime(tableEvent.endTime).hour, minutes: parseTime(tableEvent.endTime).minute)), ), @@ -161,7 +220,9 @@ class _WeekViewState extends State { return TableEventTime(hour: input.hour, minute: input.minute); } - Color getEventColor(DateTime startTime, DateTime endTime) { + Color getEventColor(String? code, DateTime startTime, DateTime endTime) { + if(code == "cancelled") return Colors.deepPurple; + if(code == "irregular") return Colors.blueAccent; if(endTime.isBefore(DateTime.now())) return Colors.grey; if(startTime.isAfter(DateTime.now())) return Theme.of(context).primaryColor; return Colors.redAccent;