From 2be33a660a6d5c2039e45219edb9e7d9305b54dd Mon Sep 17 00:00:00 2001 From: doodlezucc <electerminator@gmail.com> Date: Tue, 14 Nov 2023 15:25:08 +0100 Subject: [PATCH] introduce views/lesson providers --- lib/main.dart | 20 ++++++++------------ lib/views/mixed_class_view.dart | 30 ++++++++++++++++++++++++++++++ lib/views/view.dart | 11 +++++++++++ 3 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 lib/views/mixed_class_view.dart create mode 100644 lib/views/view.dart diff --git a/lib/main.dart b/lib/main.dart index 9bd28bc..da393dc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,11 +9,12 @@ import 'dialogs/error_dialog.dart'; import 'drawer/drawer.dart'; import 'timetable/timetable.dart'; import 'toolbar/toolbar.dart'; -import 'untis/element_type.dart'; import 'untis/fetch.dart'; import 'untis/timetable.dart'; import 'user/save_state.dart'; import 'util/listenable.dart'; +import 'views/mixed_class_view.dart'; +import 'views/view.dart'; void main() { runApp(const MyApp()); @@ -57,9 +58,11 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State<MyHomePage> { - TimetableData? timetable; + late TimetableView view; late List<StreamSubscription> _subscriptions; + TimetableData? timetable; + AppContext get appContext => widget.appContext; UntisFetch get untis => appContext.untis; @@ -109,18 +112,11 @@ class _MyHomePageState extends State<MyHomePage> { final profile = await appContext.profile.firstNotNull; final selectedClasses = profile.selectedClasses; - final allTimetables = await Future.wait(selectedClasses.map((classId) { - final cacheable = untis.timetableOf( - type: ElementType.classGroup, - elementId: classId, - date: date, - ); - - return Future(() => cacheable.fetched); - })); + view = MixedClassView(classIds: selectedClasses); + final fetchedTimetable = await view.timetableOf(date, untis: untis); setState(() { - timetable = TimetableData.mergeAll(allTimetables); + timetable = fetchedTimetable; }); } diff --git a/lib/views/mixed_class_view.dart b/lib/views/mixed_class_view.dart new file mode 100644 index 0000000..57fd7d6 --- /dev/null +++ b/lib/views/mixed_class_view.dart @@ -0,0 +1,30 @@ +import '../untis/element_type.dart'; +import '../untis/fetch.dart'; +import '../untis/timetable.dart'; +import 'dart:async'; + +import 'view.dart'; + +class MixedClassView extends TimetableView { + final Set<int> classIds; + + MixedClassView({required this.classIds}); + + @override + FutureOr<TimetableData?> timetableOf( + DateTime date, { + required UntisFetch untis, + }) async { + final allTimetables = await Future.wait(classIds.map((classId) { + final cacheable = untis.timetableOf( + type: ElementType.classGroup, + elementId: classId, + date: date, + ); + + return Future(() => cacheable.fetched); + })); + + return TimetableData.mergeAll(allTimetables); + } +} diff --git a/lib/views/view.dart b/lib/views/view.dart new file mode 100644 index 0000000..ae9a464 --- /dev/null +++ b/lib/views/view.dart @@ -0,0 +1,11 @@ +import 'dart:async'; + +import '../untis/fetch.dart'; +import '../untis/timetable.dart'; + +abstract class TimetableView { + FutureOr<TimetableData?> timetableOf( + DateTime date, { + required UntisFetch untis, + }); +} -- GitLab