From c285187973fb5934f6223f83829586e9c2620e40 Mon Sep 17 00:00:00 2001
From: doodlezucc <electerminator@gmail.com>
Date: Tue, 21 Nov 2023 14:00:13 +0100
Subject: [PATCH] adapt page title in room/lecture timetable views

---
 lib/pages/view_page.dart                  | 2 +-
 lib/timetable/lesson_chip_collection.dart | 6 +++---
 lib/timetable/lesson_dialog.dart          | 4 ++--
 lib/views/lecture_view.dart               | 6 +++++-
 lib/views/mixed_class_view.dart           | 3 +++
 lib/views/room_view.dart                  | 6 +++++-
 lib/views/single_element_view.dart        | 5 +++--
 lib/views/teacher_view.dart               | 6 +++++-
 lib/views/view.dart                       | 2 ++
 9 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/lib/pages/view_page.dart b/lib/pages/view_page.dart
index b969d9a..bf73dca 100644
--- a/lib/pages/view_page.dart
+++ b/lib/pages/view_page.dart
@@ -42,7 +42,7 @@ class _ViewPageState extends State<ViewPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: const Text('View Page'),
+        title: Text(widget.view.viewPageTitle),
       ),
       body: Column(
         children: [
diff --git a/lib/timetable/lesson_chip_collection.dart b/lib/timetable/lesson_chip_collection.dart
index ea55157..670876b 100644
--- a/lib/timetable/lesson_chip_collection.dart
+++ b/lib/timetable/lesson_chip_collection.dart
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
 import '../untis/element.dart';
 import 'lesson_chip.dart';
 
-class LessonChipCollection extends StatelessWidget {
+class LessonChipCollection<T extends UntisElement> extends StatelessWidget {
   final IconData icon;
-  final Iterable<UntisElement> elements;
-  final void Function(UntisElement element)? onChipTap;
+  final Iterable<T> elements;
+  final void Function(T element)? onChipTap;
 
   const LessonChipCollection(
     this.icon,
diff --git a/lib/timetable/lesson_dialog.dart b/lib/timetable/lesson_dialog.dart
index c873466..99f30ca 100644
--- a/lib/timetable/lesson_dialog.dart
+++ b/lib/timetable/lesson_dialog.dart
@@ -85,7 +85,7 @@ class _LessonDialogState extends State<LessonDialog> {
                 child: LessonChipCollection(
               BrandingIcons.lecture,
               [lesson.lecture],
-              onChipTap: (e) => changeView(LectureView(lectureId: e.id)),
+              onChipTap: (e) => changeView(LectureView(lecture: e)),
             )),
             IconButton(
               onPressed: () {
@@ -101,7 +101,7 @@ class _LessonDialogState extends State<LessonDialog> {
           LessonChipCollection(
             BrandingIcons.room,
             lesson.rooms,
-            onChipTap: (e) => changeView(RoomView(roomId: e.id)),
+            onChipTap: (e) => changeView(RoomView(room: e)),
           ),
         ],
         const Divider(),
diff --git a/lib/views/lecture_view.dart b/lib/views/lecture_view.dart
index bcd499f..f9eeeae 100644
--- a/lib/views/lecture_view.dart
+++ b/lib/views/lecture_view.dart
@@ -1,10 +1,14 @@
 import '../untis/element_type.dart';
 
+import '../untis/lecture.dart';
 import 'single_element_view.dart';
 
 class LectureView extends SingleElementView {
-  LectureView({required int lectureId}) : super(elementId: lectureId);
+  LectureView({required Lecture lecture}) : super(element: lecture);
 
   @override
   ElementType get elementType => ElementType.lecture;
+
+  @override
+  String get viewPageTitle => element.name;
 }
diff --git a/lib/views/mixed_class_view.dart b/lib/views/mixed_class_view.dart
index 57fd7d6..9d4badc 100644
--- a/lib/views/mixed_class_view.dart
+++ b/lib/views/mixed_class_view.dart
@@ -27,4 +27,7 @@ class MixedClassView extends TimetableView {
 
     return TimetableData.mergeAll(allTimetables);
   }
+
+  @override
+  String get viewPageTitle => 'Mixed Classes';
 }
diff --git a/lib/views/room_view.dart b/lib/views/room_view.dart
index 65612e1..f8976d9 100644
--- a/lib/views/room_view.dart
+++ b/lib/views/room_view.dart
@@ -1,10 +1,14 @@
 import '../untis/element_type.dart';
 
+import '../untis/room.dart';
 import 'single_element_view.dart';
 
 class RoomView extends SingleElementView {
-  RoomView({required int roomId}) : super(elementId: roomId);
+  RoomView({required Room room}) : super(element: room);
 
   @override
   ElementType get elementType => ElementType.room;
+
+  @override
+  String get viewPageTitle => 'Raum ${element.name}';
 }
diff --git a/lib/views/single_element_view.dart b/lib/views/single_element_view.dart
index 100bdf9..2a2c26b 100644
--- a/lib/views/single_element_view.dart
+++ b/lib/views/single_element_view.dart
@@ -7,10 +7,11 @@ import 'dart:async';
 import 'view.dart';
 
 abstract class SingleElementView<T extends UntisElement> extends TimetableView {
-  final int elementId;
+  final T element;
 
-  SingleElementView({required this.elementId});
+  SingleElementView({required this.element});
 
+  int get elementId => element.id;
   ElementType get elementType;
 
   @override
diff --git a/lib/views/teacher_view.dart b/lib/views/teacher_view.dart
index 10cfaef..e77c13b 100644
--- a/lib/views/teacher_view.dart
+++ b/lib/views/teacher_view.dart
@@ -1,11 +1,15 @@
 import '../untis/element_type.dart';
 
+import '../untis/teacher.dart';
 import 'single_element_view.dart';
 
 @Deprecated('Only logged in users can see teacher timetables')
 class TeacherView extends SingleElementView {
-  TeacherView({required int teacherId}) : super(elementId: teacherId);
+  TeacherView({required Teacher teacher}) : super(element: teacher);
 
   @override
   ElementType get elementType => ElementType.teacher;
+
+  @override
+  String get viewPageTitle => element.name;
 }
diff --git a/lib/views/view.dart b/lib/views/view.dart
index ae9a464..3ec36ad 100644
--- a/lib/views/view.dart
+++ b/lib/views/view.dart
@@ -4,6 +4,8 @@ import '../untis/fetch.dart';
 import '../untis/timetable.dart';
 
 abstract class TimetableView {
+  String get viewPageTitle;
+
   FutureOr<TimetableData?> timetableOf(
     DateTime date, {
     required UntisFetch untis,
-- 
GitLab