diff options
author | Iván Ávalos <avalos@disroot.org> | 2023-03-05 22:09:34 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2023-03-05 22:48:50 -0600 |
commit | 6cf6880787ae7cd52293df048283e0848d43f6c7 (patch) | |
tree | 91f9f2393f3aa370e7cccef82a710863f9350881 | |
parent | b57766ceda9c0a097becea7f3bc6c729929b90cb (diff) | |
download | pmsna1-6cf6880787ae7cd52293df048283e0848d43f6c7.tar.gz pmsna1-6cf6880787ae7cd52293df048283e0848d43f6c7.tar.bz2 pmsna1-6cf6880787ae7cd52293df048283e0848d43f6c7.zip |
Save selected theme to shared preferences
-rw-r--r-- | lib/main.dart | 9 | ||||
-rw-r--r-- | lib/providers/theme_provider.dart | 12 | ||||
-rw-r--r-- | lib/settings/preferences.dart | 34 | ||||
-rw-r--r-- | macos/Flutter/GeneratedPluginRegistrant.swift | 2 | ||||
-rw-r--r-- | pubspec.lock | 56 | ||||
-rw-r--r-- | pubspec.yaml | 1 |
6 files changed, 108 insertions, 6 deletions
diff --git a/lib/main.dart b/lib/main.dart index 49e59ac..8af7617 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -42,12 +42,9 @@ class PMSNA1 extends StatelessWidget { @override Widget build(BuildContext context) { - final ThemeData? theme = context.watch<ThemeProvider>().theme; - // return MaterialApp( - // theme: theme ?? ThemeSettings.darkTheme, - // routes: getApplicationRoutes(), - // initialRoute: '/login', - // ); + final ThemeProvider provider = context.watch<ThemeProvider>(); + final ThemeData? theme = provider.theme; + provider.syncFromPrefs(); return MaterialApp( theme: theme ?? ThemeSettings.lightTheme, darkTheme: theme ?? ThemeSettings.darkTheme, diff --git a/lib/providers/theme_provider.dart b/lib/providers/theme_provider.dart index b438d84..14bc6f8 100644 --- a/lib/providers/theme_provider.dart +++ b/lib/providers/theme_provider.dart @@ -1,11 +1,23 @@ import 'package:flutter/material.dart'; +import 'package:pmsna1/settings/preferences.dart'; class ThemeProvider with ChangeNotifier { + bool synced = false; ThemeData? _theme; + void syncFromPrefs() { + if (synced) return; + Preferences.getTheme().then((t) { + synced = true; + _theme = t; + notifyListeners(); + }); + } + ThemeData? get theme => _theme; set theme(ThemeData? theme) { + Preferences.setTheme(theme); _theme = theme; notifyListeners(); } diff --git a/lib/settings/preferences.dart b/lib/settings/preferences.dart new file mode 100644 index 0000000..f6516f9 --- /dev/null +++ b/lib/settings/preferences.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:pmsna1/settings/themes.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class Preferences { + static SharedPreferences? _prefs; + + static Future<SharedPreferences> get prefs async { + _prefs ??= await SharedPreferences.getInstance(); + return _prefs!; + } + + static Future<ThemeData?> getTheme() async { + switch ((await prefs).getString('theme')) { + case 'light': + return ThemeSettings.lightTheme; + case 'dark': + return ThemeSettings.darkTheme; + } + return null; + } + + static void setTheme(ThemeData? theme) { + prefs.then((p) { + if (theme == ThemeSettings.lightTheme) { + p.setString('theme', 'light'); + } else if (theme == ThemeSettings.darkTheme) { + p.setString('theme', 'dark'); + } else { + p.remove('theme'); + } + }); + } +} diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 2bfe7e4..eefcc6d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,9 +6,11 @@ import FlutterMacOS import Foundation import path_provider_foundation +import shared_preferences_foundation import sqflite func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) } diff --git a/pubspec.lock b/pubspec.lock index a9b2bbd..773eaa6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -392,6 +392,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.5" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 + url: "https://pub.dev" + source: hosted + version: "2.0.18" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: a51a4f9375097f94df1c6e0a49c0374440d31ab026b59d58a7e7660675879db4 + url: "https://pub.dev" + source: hosted + version: "2.0.16" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "6b84fdf06b32bb336f972d373cd38b63734f3461ba56ac2ba01b56d052796259" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: d7fb71e6e20cd3dfffcc823a28da3539b392e53ed5fc5c2b90b55fdaa8a7e8fa + url: "https://pub.dev" + source: hosted + version: "2.1.4" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "6737b757e49ba93de2a233df229d0b6a87728cea1684da828cbc718b65dcf9d7" + url: "https://pub.dev" + source: hosted + version: "2.0.5" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: bd014168e8484837c39ef21065b78f305810ceabc1d4f90be6e3b392ce81b46d + url: "https://pub.dev" + source: hosted + version: "2.1.4" sky_engine: dependency: transitive description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index 8bffd86..f31d24f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: email_validator: ^2.1.17 concentric_transition: ^1.0.3 lottie: ^2.2.0 + shared_preferences: ^2.0.18 dev_dependencies: flutter_test: |