summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-03-05 22:09:34 -0600
committerIván Ávalos <avalos@disroot.org>2023-03-05 22:48:50 -0600
commit6cf6880787ae7cd52293df048283e0848d43f6c7 (patch)
tree91f9f2393f3aa370e7cccef82a710863f9350881
parentb57766ceda9c0a097becea7f3bc6c729929b90cb (diff)
downloadpmsna1-6cf6880787ae7cd52293df048283e0848d43f6c7.tar.gz
pmsna1-6cf6880787ae7cd52293df048283e0848d43f6c7.tar.bz2
pmsna1-6cf6880787ae7cd52293df048283e0848d43f6c7.zip
Save selected theme to shared preferences
-rw-r--r--lib/main.dart9
-rw-r--r--lib/providers/theme_provider.dart12
-rw-r--r--lib/settings/preferences.dart34
-rw-r--r--macos/Flutter/GeneratedPluginRegistrant.swift2
-rw-r--r--pubspec.lock56
-rw-r--r--pubspec.yaml1
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: