|
|
|
@ -1,5 +1,4 @@
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:pi_dashboard/logger.dart';
|
|
|
|
|
|
|
|
|
|
import 'settings_service.dart';
|
|
|
|
|
|
|
|
|
@ -9,48 +8,50 @@ import 'settings_service.dart';
|
|
|
|
|
/// Controllers glue Data Services to Flutter Widgets. The SettingsController
|
|
|
|
|
/// uses the SettingsService to store and retrieve user settings.
|
|
|
|
|
class SettingsController with ChangeNotifier {
|
|
|
|
|
SettingsController(this._settingsService);
|
|
|
|
|
SettingsController(
|
|
|
|
|
this._settingsService,
|
|
|
|
|
) : _stringOpts = {},
|
|
|
|
|
_boolOpts = {},
|
|
|
|
|
_intOpts = {};
|
|
|
|
|
|
|
|
|
|
final SettingsService _settingsService;
|
|
|
|
|
|
|
|
|
|
Future<void> loadSettings() async {
|
|
|
|
|
_themeMode = await _settingsService.themeMode();
|
|
|
|
|
_hostname = await _settingsService.keyStr("hostname");
|
|
|
|
|
_username = await _settingsService.keyStr("username");
|
|
|
|
|
_password = await _settingsService.keyStr("password");
|
|
|
|
|
_stringOpts["protocol"] = await _settingsService.get<String>("protocol");
|
|
|
|
|
_stringOpts["hostname"] = await _settingsService.get("hostname");
|
|
|
|
|
_intOpts["port"] = await _settingsService.get("port");
|
|
|
|
|
_stringOpts["username"] = await _settingsService.get("username");
|
|
|
|
|
_stringOpts["password"] = await _settingsService.get("password");
|
|
|
|
|
_boolOpts["lockApp"] = await _settingsService.get("lockApp");
|
|
|
|
|
// Important! Inform listeners a change has occurred.
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
late ThemeMode _themeMode;
|
|
|
|
|
ThemeMode get themeMode => _themeMode;
|
|
|
|
|
late String _hostname;
|
|
|
|
|
String get hostname => _hostname;
|
|
|
|
|
late String _username;
|
|
|
|
|
String get username => _username;
|
|
|
|
|
late String _password;
|
|
|
|
|
String get password => _password;
|
|
|
|
|
final Map<String, String?> _stringOpts;
|
|
|
|
|
final Map<String, bool?> _boolOpts;
|
|
|
|
|
final Map<String, int?> _intOpts;
|
|
|
|
|
|
|
|
|
|
Future<void> _setKey(String key, String value) async {
|
|
|
|
|
Future<void> set<T>(String key, T? value) async {
|
|
|
|
|
if (value == null) return;
|
|
|
|
|
await _settingsService.set(key, value);
|
|
|
|
|
notifyListeners();
|
|
|
|
|
await _settingsService.setKeyStr(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> setHostname(String newHostname) async {
|
|
|
|
|
_hostname = newHostname;
|
|
|
|
|
await _setKey("hostname", hostname);
|
|
|
|
|
Log().debug("Hostname update: $hostname");
|
|
|
|
|
T get<T>(String key, T default_) {
|
|
|
|
|
if (T is String) {
|
|
|
|
|
return _stringOpts.containsKey(key) ? _stringOpts[key] as T : default_;
|
|
|
|
|
} else if (T is bool) {
|
|
|
|
|
return _boolOpts.containsKey(key) ? _boolOpts[key] as T : default_;
|
|
|
|
|
} else if (T is int) {
|
|
|
|
|
return _intOpts.containsKey(key) ? _intOpts[key] as T : default_;
|
|
|
|
|
} else {
|
|
|
|
|
throw Exception("this type is not implemented");
|
|
|
|
|
}
|
|
|
|
|
Future<void> setUsername(String newUsername) async {
|
|
|
|
|
_username = newUsername;
|
|
|
|
|
await _setKey("username", username);
|
|
|
|
|
Log().debug("username update: $username");
|
|
|
|
|
}
|
|
|
|
|
Future<void> setPassword(String newPassword) async {
|
|
|
|
|
_password = newPassword;
|
|
|
|
|
await _setKey("password", password);
|
|
|
|
|
Log().debug("password update");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Update and persist the ThemeMode based on the user's selection.
|
|
|
|
|
Future<void> updateThemeMode(ThemeMode? newThemeMode) async {
|
|
|
|
|
if (newThemeMode == null) return;
|
|
|
|
|