diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index 5da2980..ad74def 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -47,7 +47,7 @@ - @@ -131,14 +131,14 @@ - - @@ -152,7 +152,7 @@ - @@ -208,7 +208,7 @@ - @@ -229,7 +229,7 @@ - @@ -257,7 +257,7 @@ - @@ -299,7 +299,7 @@ - @@ -327,35 +327,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - @@ -439,7 +411,7 @@ - @@ -488,14 +460,14 @@ - - @@ -530,14 +502,14 @@ - - @@ -555,31 +527,10 @@ - - - - - - - - - - - - - - - - - - - @@ -635,7 +586,7 @@ - @@ -656,7 +607,7 @@ - @@ -698,7 +649,7 @@ - @@ -754,7 +705,7 @@ - @@ -768,7 +719,7 @@ - @@ -880,7 +831,7 @@ - @@ -1020,63 +971,63 @@ - - - - - - - - - @@ -1104,7 +1055,7 @@ - @@ -1125,7 +1076,7 @@ - @@ -1139,7 +1090,7 @@ - @@ -1174,7 +1125,7 @@ - @@ -1259,15 +1210,15 @@ - - + + - + @@ -1279,10 +1230,10 @@ - - + + - + @@ -1290,14 +1241,14 @@ - + - + - + @@ -1306,11 +1257,7 @@ - - - - - + @@ -1319,25 +1266,22 @@ - + - - + + - - + + - - - - + @@ -1345,10 +1289,10 @@ - + - + @@ -1361,9 +1305,9 @@ - + - + @@ -1379,7 +1323,7 @@ - + @@ -1398,29 +1342,29 @@ - - - - - - - - - + + + + + + + + + - + - + - + - + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index 87dd116..e0b5f46 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -20,23 +20,17 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 6e86672..00a4da9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -2,4 +2,7 @@ + + \ No newline at end of file diff --git a/lib/api/holidays/getHolidays.dart b/lib/api/holidays/getHolidays.dart index 1aff999..f8a4a4c 100644 --- a/lib/api/holidays/getHolidays.dart +++ b/lib/api/holidays/getHolidays.dart @@ -7,7 +7,12 @@ import 'getHolidaysResponse.dart'; class GetHolidays { Future query() async { String response = (await http.get(Uri.parse("https://ferien-api.de/api/v1/holidays/HE"))).body; - List parsedListJson = jsonDecode(response); - return GetHolidaysResponse(List.from(parsedListJson.map((dynamic i) => GetHolidaysResponseObject.fromJson(i)))); + return GetHolidaysResponse( + List.from( + jsonDecode(response).map( + (dynamic i) => GetHolidaysResponseObject.fromJson(i) + ) + ) + ); } } \ No newline at end of file diff --git a/lib/api/holidays/getHolidaysCache.dart b/lib/api/holidays/getHolidaysCache.dart index fe7abb7..3c15db7 100644 --- a/lib/api/holidays/getHolidaysCache.dart +++ b/lib/api/holidays/getHolidaysCache.dart @@ -12,7 +12,13 @@ class GetHolidaysCache extends RequestCache { @override GetHolidaysResponse onLocalData(String json) { List parsedListJson = jsonDecode(json)['data']; - return GetHolidaysResponse(List.from(parsedListJson.map((dynamic i) => GetHolidaysResponseObject.fromJson(i)))); + return GetHolidaysResponse( + List.from( + parsedListJson.map( + (dynamic i) => GetHolidaysResponseObject.fromJson(i) + ) + ) + ); } @override diff --git a/lib/api/marianumcloud/talk/setFavorite/setFavorite.dart b/lib/api/marianumcloud/talk/setFavorite/setFavorite.dart index ce331cf..1d4d44d 100644 --- a/lib/api/marianumcloud/talk/setFavorite/setFavorite.dart +++ b/lib/api/marianumcloud/talk/setFavorite/setFavorite.dart @@ -11,9 +11,7 @@ class SetFavorite extends TalkApi { SetFavorite(this.chatToken, this.favoriteState) : super("v4/room/$chatToken/favorite", null); @override - assemble(String raw) { - - } + assemble(String raw) {} @override Future request(Uri uri, Object? body, Map? headers) { diff --git a/lib/main.dart b/lib/main.dart index 5b9bd46..b31850a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -95,8 +95,6 @@ class _MainState extends State
{ themeMode: settings.val().appTheme, theme: LightAppTheme.theme, darkTheme: DarkAppTheme.theme, - - home: Consumer( builder: (context, accountModel, child) { switch(accountModel.state) { diff --git a/lib/storage/base/settingsProvider.dart b/lib/storage/base/settingsProvider.dart index 6b40a00..2247198 100644 --- a/lib/storage/base/settingsProvider.dart +++ b/lib/storage/base/settingsProvider.dart @@ -25,19 +25,31 @@ class SettingsProvider extends ChangeNotifier { } SettingsProvider() { - init(); + _readFromStorage(); } - void init({bool resetConfig = false}) async { + void reset() async { _storage = await SharedPreferences.getInstance(); + _storage.remove(_fieldName); - if(resetConfig) _storage.remove(_fieldName); + notifyListeners(); + } + + void _readFromStorage() async { + _storage = await SharedPreferences.getInstance(); try { _settings = Settings.fromJson(jsonDecode(_storage.getString(_fieldName)!)); - } catch(e) { - log("Settings are defective, using defaults: ${e.toString()}"); - _settings = _defaults(); + } catch(exception) { + try { + log("Settings were changed, trying to recover from old Settings: ${exception.toString()}"); + _settings = Settings.fromJson(_mergeSettings(jsonDecode(_storage.getString(_fieldName)!), _defaults().toJson())); + log("Settings recovered successfully: ${_settings.toJson().toString()}"); + } catch(exception) { + log("Settings are defective and not recoverable, using defaults: ${exception.toString()}"); + _settings = _defaults(); + log("Settings were reset to defaults!"); + } } notifyListeners(); @@ -47,6 +59,22 @@ class SettingsProvider extends ChangeNotifier { await _storage.setString(_fieldName, jsonEncode(_settings.toJson())); } + Map _mergeSettings(Map oldMap, Map newMap) { + Map mergedMap = Map.from(newMap); + + oldMap.forEach((key, value) { + if (mergedMap.containsKey(key)) { + if (value is Map && mergedMap[key] is Map) { + mergedMap[key] = _mergeSettings(value, mergedMap[key]); + } else { + mergedMap[key] = value; + } + } + }); + + return mergedMap; + } + Settings _defaults() { return Settings( appTheme: ThemeMode.system, diff --git a/lib/view/settings/settings.dart b/lib/view/settings/settings.dart index bd2731f..1847dd1 100644 --- a/lib/view/settings/settings.dart +++ b/lib/view/settings/settings.dart @@ -39,7 +39,6 @@ class _SettingsState extends State { ), body: ListView( children: [ - ListTile( leading: const Icon(Icons.logout_outlined), title: const Text("Konto abmelden"), @@ -248,7 +247,7 @@ class _SettingsState extends State { confirmButton: "Unwiederruflich Löschen", onConfirm: () { setState(() { - Provider.of(context, listen: false).init(resetConfig: true); + Provider.of(context, listen: false).reset(); }); }, ).asDialog(context); diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 7299b5c..f6f23bf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,13 +6,9 @@ #include "generated_plugin_registrant.h" -#include #include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); - file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 786ff5c..f16b4c3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - file_selector_linux url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 9d5f78f..7026e66 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,6 @@ import FlutterMacOS import Foundation import device_info_plus -import file_selector_macos import package_info import path_provider_foundation import shared_preferences_foundation @@ -16,7 +15,6 @@ import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) - FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 779f0ee..9871f6b 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,13 +6,10 @@ #include "generated_plugin_registrant.h" -#include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { - FileSelectorWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("FileSelectorWindows")); SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 3757972..2487723 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - file_selector_windows syncfusion_pdfviewer_windows url_launcher_windows )