From f2505f17cff57b49a41bb02f0e1edebe8431a7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 4 Jun 2023 00:44:24 +0200 Subject: [PATCH] Made timetable zoom persistent --- lib/storage/base/settings.dart | 5 ++++- lib/storage/base/settings.g.dart | 3 +++ lib/storage/base/settingsProvider.dart | 4 ++++ lib/storage/timetable/timetableSettings.dart | 13 +++++++++++++ lib/storage/timetable/timetableSettings.g.dart | 17 +++++++++++++++++ lib/view/pages/timetable/timetable.dart | 8 +++++++- 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 lib/storage/timetable/timetableSettings.dart create mode 100644 lib/storage/timetable/timetableSettings.g.dart diff --git a/lib/storage/base/settings.dart b/lib/storage/base/settings.dart index 5366181..a6d4401 100644 --- a/lib/storage/base/settings.dart +++ b/lib/storage/base/settings.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:json_annotation/json_annotation.dart'; import '../gradeAverages/gradeAveragesSettings.dart'; +import '../timetable/timetableSettings.dart'; part 'settings.g.dart'; @@ -15,11 +16,13 @@ class Settings { bool devToolsEnabled; GradeAveragesSettings gradeAveragesSettings; + TimetableSettings timetableSettings; Settings({ required this.appTheme, required this.devToolsEnabled, - required this.gradeAveragesSettings + required this.gradeAveragesSettings, + required this.timetableSettings }); static String _themeToJson(ThemeMode m) => m.name; diff --git a/lib/storage/base/settings.g.dart b/lib/storage/base/settings.g.dart index b71778e..f3be406 100644 --- a/lib/storage/base/settings.g.dart +++ b/lib/storage/base/settings.g.dart @@ -11,10 +11,13 @@ Settings _$SettingsFromJson(Map json) => Settings( devToolsEnabled: json['devToolsEnabled'] as bool, gradeAveragesSettings: GradeAveragesSettings.fromJson( json['gradeAveragesSettings'] as Map), + timetableSettings: TimetableSettings.fromJson( + json['timetableSettings'] as Map), ); Map _$SettingsToJson(Settings instance) => { 'appTheme': Settings._themeToJson(instance.appTheme), 'devToolsEnabled': instance.devToolsEnabled, 'gradeAveragesSettings': instance.gradeAveragesSettings.toJson(), + 'timetableSettings': instance.timetableSettings.toJson(), }; diff --git a/lib/storage/base/settingsProvider.dart b/lib/storage/base/settingsProvider.dart index d2ac4be..a29c0eb 100644 --- a/lib/storage/base/settingsProvider.dart +++ b/lib/storage/base/settingsProvider.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:marianum_mobile/storage/gradeAverages/gradeAveragesSettings.dart'; +import 'package:marianum_mobile/storage/timetable/timetableSettings.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'settings.dart'; @@ -49,6 +50,9 @@ class SettingsProvider extends ChangeNotifier { useGradeSystem: true, inputs: [] ), + timetableSettings: TimetableSettings( + zoom: 40, + ), ); } } \ No newline at end of file diff --git a/lib/storage/timetable/timetableSettings.dart b/lib/storage/timetable/timetableSettings.dart new file mode 100644 index 0000000..beb7a6e --- /dev/null +++ b/lib/storage/timetable/timetableSettings.dart @@ -0,0 +1,13 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'timetableSettings.g.dart'; + +@JsonSerializable() +class TimetableSettings { + double zoom; + + TimetableSettings({required this.zoom}); + + factory TimetableSettings.fromJson(Map json) => _$TimetableSettingsFromJson(json); + Map toJson() => _$TimetableSettingsToJson(this); +} \ No newline at end of file diff --git a/lib/storage/timetable/timetableSettings.g.dart b/lib/storage/timetable/timetableSettings.g.dart new file mode 100644 index 0000000..598c466 --- /dev/null +++ b/lib/storage/timetable/timetableSettings.g.dart @@ -0,0 +1,17 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'timetableSettings.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +TimetableSettings _$TimetableSettingsFromJson(Map json) => + TimetableSettings( + zoom: (json['zoom'] as num).toDouble(), + ); + +Map _$TimetableSettingsToJson(TimetableSettings instance) => + { + 'zoom': instance.zoom, + }; diff --git a/lib/view/pages/timetable/timetable.dart b/lib/view/pages/timetable/timetable.dart index 6708894..489b927 100644 --- a/lib/view/pages/timetable/timetable.dart +++ b/lib/view/pages/timetable/timetable.dart @@ -2,6 +2,7 @@ import 'dart:developer'; import 'package:flutter/material.dart'; +import 'package:marianum_mobile/storage/base/settingsProvider.dart'; import 'package:provider/provider.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; @@ -28,8 +29,13 @@ class _TimetableState extends State { double elementScale = 40; double baseElementScale = 40; + late final SettingsProvider settings; + @override void initState() { + settings = Provider.of(context, listen: false); + elementScale = baseElementScale = settings.val().timetableSettings.zoom; + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { Provider.of(context, listen: false).run(); }); @@ -75,7 +81,7 @@ class _TimetableState extends State { }); }, onScaleEnd: (details) { - // TODO save scale for later + settings.val(write: true).timetableSettings.zoom = elementScale; }, child: SfCalendar(