diff --git a/lib/src/settings/settings_controller.dart b/lib/src/settings/settings_controller.dart index f29a34f..f832521 100644 --- a/lib/src/settings/settings_controller.dart +++ b/lib/src/settings/settings_controller.dart @@ -17,7 +17,7 @@ class SettingsController with ChangeNotifier { _themeMode = await _settingsService.themeMode(); _hostname = await _settingsService.keyStr("hostname"); _username = await _settingsService.keyStr("username"); - _password = await _settingsService.keyStr("password"); + _password = await _settingsService.keyStrSec("password"); // Important! Inform listeners a change has occurred. notifyListeners(); } @@ -35,6 +35,10 @@ class SettingsController with ChangeNotifier { notifyListeners(); await _settingsService.setKeyStr(key, value); } + Future _setKeySec(String key, String value) async { + notifyListeners(); + await _settingsService.setKeyStrSec(key, value); + } Future setHostname(String newHostname) async { _hostname = newHostname; @@ -48,24 +52,16 @@ class SettingsController with ChangeNotifier { } Future setPassword(String newPassword) async { _password = newPassword; - await _setKey("password", password); + await _setKeySec("password", password); Log().debug("password update"); } - /// Update and persist the ThemeMode based on the user's selection. + Future updateThemeMode(ThemeMode? newThemeMode) async { if (newThemeMode == null) return; - - // Do not perform any work if new and old ThemeMode are identical if (newThemeMode == _themeMode) return; - - // Otherwise, store the new ThemeMode in memory _themeMode = newThemeMode; - // Important! Inform listeners a change has occurred. notifyListeners(); - - // Persist the changes to a local database or the internet using the - // SettingService. await _settingsService.updateThemeMode(newThemeMode); } } diff --git a/lib/src/settings/settings_service.dart b/lib/src/settings/settings_service.dart index 155348e..eda3dae 100644 --- a/lib/src/settings/settings_service.dart +++ b/lib/src/settings/settings_service.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; /// A service that stores and retrieves user settings. /// @@ -7,6 +8,7 @@ import 'package:shared_preferences/shared_preferences.dart'; /// persist the user settings locally, use the shared_preferences package. If /// you'd like to store settings on a web server, use the http package. class SettingsService { + /// Loads the User's preferred ThemeMode from local or remote storage. Future themeMode() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); @@ -32,4 +34,16 @@ class SettingsService { final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString(key, value); } + + Future keyStrSec(String key) async { + const storage = FlutterSecureStorage(); + String? res = await storage.read(key: key); + if (res == null) return ""; + return res; + } + + Future setKeyStrSec(String key, String value) async { + const storage = FlutterSecureStorage(); + await storage.write(key: key, value: value); + } } diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..d0e7f79 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin"); + flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..b29e9ba 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + flutter_secure_storage_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/pubspec.yaml b/pubspec.yaml index 157db65..ca9fa3e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: shared_preferences: async: ^2.11.0 logger: ^2.2.0 + flutter_secure_storage: ^9.2.1 flutter_gen: any dev_dependencies: