stack_wallet/lib/utilities/prefs.dart
julian 3e1e68237a Merge remote-tracking branch 'origin/staging' into add-ethereum
# Conflicts:
#	lib/models/isar/models/blockchain_data/address.dart
#	lib/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart
#	lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
#	lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
#	lib/utilities/db_version_migration.dart
#	test/pages/send_view/send_view_test.mocks.dart
#	test/screen_tests/address_book_view/subviews/add_address_book_view_screen_test.mocks.dart
#	test/screen_tests/address_book_view/subviews/address_book_entry_details_view_screen_test.mocks.dart
#	test/screen_tests/address_book_view/subviews/edit_address_book_entry_view_screen_test.mocks.dart
#	test/screen_tests/exchange/exchange_view_test.mocks.dart
#	test/screen_tests/lockscreen_view_screen_test.mocks.dart
#	test/screen_tests/main_view_tests/main_view_screen_testA_test.mocks.dart
#	test/screen_tests/main_view_tests/main_view_screen_testB_test.mocks.dart
#	test/screen_tests/main_view_tests/main_view_screen_testC_test.mocks.dart
#	test/screen_tests/onboarding/backup_key_view_screen_test.mocks.dart
#	test/screen_tests/onboarding/backup_key_warning_view_screen_test.mocks.dart
#	test/screen_tests/onboarding/create_pin_view_screen_test.mocks.dart
#	test/screen_tests/onboarding/restore_wallet_view_screen_test.mocks.dart
#	test/screen_tests/onboarding/verify_backup_key_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/currency_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/network_settings_subviews/add_custom_node_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/network_settings_subviews/node_details_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/wallet_backup_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/rescan_warning_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/wallet_delete_mnemonic_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_subviews/wallet_settings_view_screen_test.mocks.dart
#	test/screen_tests/settings_view/settings_view_screen_test.mocks.dart
#	test/screen_tests/transaction_subviews/transaction_search_results_view_screen_test.mocks.dart
#	test/screen_tests/wallet_view/confirm_send_view_screen_test.mocks.dart
#	test/screen_tests/wallet_view/receive_view_screen_test.mocks.dart
#	test/screen_tests/wallet_view/send_view_screen_test.mocks.dart
#	test/screen_tests/wallet_view/wallet_view_screen_test.mocks.dart
#	test/widget_tests/managed_favorite_test.mocks.dart
#	test/widget_tests/table_view/table_view_row_test.mocks.dart
#	test/widget_tests/transaction_card_test.mocks.dart
#	test/widget_tests/wallet_info_row/sub_widgets/wallet_info_row_balance_future_test.mocks.dart
#	test/widget_tests/wallet_info_row/wallet_info_row_test.mocks.dart
2023-03-23 18:13:24 -06:00

769 lines
22 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:stackwallet/db/hive/db.dart';
import 'package:stackwallet/utilities/constants.dart';
import 'package:stackwallet/utilities/enums/backup_frequency_type.dart';
import 'package:stackwallet/utilities/enums/languages_enum.dart';
import 'package:stackwallet/utilities/enums/sync_type_enum.dart';
import 'package:stackwallet/utilities/theme/color_theme.dart';
import 'package:uuid/uuid.dart';
class Prefs extends ChangeNotifier {
Prefs._();
static final Prefs _instance = Prefs._();
static Prefs get instance => _instance;
bool _initialized = false;
bool get isInitialized => _initialized;
Future<void> init() async {
if (!_initialized) {
_currency = await _getPreferredCurrency();
// _exchangeRateType = await _getExchangeRateType();
_useBiometrics = await _getUseBiometrics();
_hasPin = await _getHasPin();
_language = await _getPreferredLanguage();
_showFavoriteWallets = await _getShowFavoriteWallets();
_wifiOnly = await _getUseWifiOnly();
_syncType = await _getSyncType();
_walletIdsSyncOnStartup = await _getWalletIdsSyncOnStartup();
_currentNotificationId = await _getCurrentNotificationIndex();
_lastUnlocked = await _getLastUnlocked();
_lastUnlockedTimeout = await _getLastUnlockedTimeout();
_showTestNetCoins = await _getShowTestNetCoins();
_isAutoBackupEnabled = await _getIsAutoBackupEnabled();
_autoBackupLocation = await _getAutoBackupLocation();
_backupFrequencyType = await _getBackupFrequencyType();
_lastAutoBackup = await _getLastAutoBackup();
_hideBlockExplorerWarning = await _getHideBlockExplorerWarning();
_gotoWalletOnStartup = await _getGotoWalletOnStartup();
_startupWalletId = await _getStartupWalletId();
_externalCalls = await _getHasExternalCalls();
_familiarity = await _getHasFamiliarity();
_userId = await _getUserId();
_signupEpoch = await _getSignupEpoch();
_enableCoinControl = await _getEnableCoinControl();
_enableSystemBrightness = await _getEnableSystemBrightness();
_theme = await _getTheme();
_systemBrightnessLightTheme = await _getSystemBrightnessLightTheme();
_systemBrightnessDarkTheme = await _getSystemBrightnessDarkTheme();
_initialized = true;
}
}
// last timestamp user unlocked wallet
int _lastUnlockedTimeout = 60;
int get lastUnlockedTimeout => _lastUnlockedTimeout;
set lastUnlockedTimeout(int lastUnlockedTimeout) {
if (_lastUnlockedTimeout != lastUnlockedTimeout) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "lastUnlockedTimeout",
value: lastUnlockedTimeout);
_lastUnlockedTimeout = lastUnlockedTimeout;
notifyListeners();
}
}
Future<int> _getLastUnlockedTimeout() async {
return (DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "lastUnlockedTimeout")) as int? ??
60;
}
// last timestamp user unlocked wallet
int _lastUnlocked = 0;
int get lastUnlocked => _lastUnlocked;
set lastUnlocked(int lastUnlocked) {
if (_lastUnlocked != lastUnlocked) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "lastUnlocked", value: lastUnlocked);
_lastUnlocked = lastUnlocked;
notifyListeners();
}
}
Future<int> _getLastUnlocked() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "lastUnlocked") as int? ??
0;
}
// notification index
late int _currentNotificationId;
int get currentNotificationId => _currentNotificationId;
Future<void> incrementCurrentNotificationIndex() async {
if (_currentNotificationId <= Constants.notificationsMax) {
_currentNotificationId++;
} else {
_currentNotificationId = 0;
}
await DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "currentNotificationId",
value: _currentNotificationId);
notifyListeners();
}
Future<int> _getCurrentNotificationIndex() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "currentNotificationId") as int? ??
0;
}
// list of wallet ids to auto sync when auto sync only selected wallets is chosen
List<String> _walletIdsSyncOnStartup = [];
List<String> get walletIdsSyncOnStartup => _walletIdsSyncOnStartup;
set walletIdsSyncOnStartup(List<String> walletIdsSyncOnStartup) {
if (_walletIdsSyncOnStartup != walletIdsSyncOnStartup) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "walletIdsSyncOnStartup",
value: walletIdsSyncOnStartup);
_walletIdsSyncOnStartup = walletIdsSyncOnStartup;
notifyListeners();
}
}
Future<List<String>> _getWalletIdsSyncOnStartup() async {
final list = await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "walletIdsSyncOnStartup") as List? ??
[];
return List<String>.from(list);
}
// sync type
SyncingType _syncType = SyncingType.allWalletsOnStartup;
SyncingType get syncType => _syncType;
set syncType(SyncingType syncType) {
if (_syncType != syncType) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "syncTypeIndex",
value: syncType.index);
_syncType = syncType;
notifyListeners();
}
}
Future<SyncingType> _getSyncType() async {
final int index = await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "syncTypeIndex") as int? ??
SyncingType.allWalletsOnStartup.index;
return SyncingType.values[index];
}
// wifi only
bool _wifiOnly = false;
bool get wifiOnly => _wifiOnly;
set wifiOnly(bool wifiOnly) {
if (_wifiOnly != wifiOnly) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "wifiOnly", value: wifiOnly);
_wifiOnly = wifiOnly;
notifyListeners();
}
}
Future<bool> _getUseWifiOnly() async {
return await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "wifiOnly") as bool? ??
false;
}
// show favorites
bool _showFavoriteWallets = true;
bool get showFavoriteWallets => _showFavoriteWallets;
set showFavoriteWallets(bool showFavoriteWallets) {
if (_showFavoriteWallets != showFavoriteWallets) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "showFavoriteWallets",
value: showFavoriteWallets);
_showFavoriteWallets = showFavoriteWallets;
notifyListeners();
}
}
Future<bool> _getShowFavoriteWallets() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "showFavoriteWallets") as bool? ??
true;
}
// language
String _language = Language.englishUS.description;
String get language => _language;
set language(String newLanguage) {
if (_language != newLanguage) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "language", value: newLanguage);
_language = newLanguage;
notifyListeners();
}
}
Future<String> _getPreferredLanguage() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "language") as String? ??
Language.englishUS.description;
}
// base currency
String _currency = "USD";
String get currency => _currency;
set currency(String newCurrency) {
if (currency != newCurrency) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "currency", value: newCurrency);
_currency = newCurrency;
notifyListeners();
}
}
Future<String> _getPreferredCurrency() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "currency") as String? ??
"USD";
}
// exchange rate type
// ExchangeRateType _exchangeRateType = ExchangeRateType.estimated;
//
// ExchangeRateType get exchangeRateType => _exchangeRateType;
//
// set exchangeRateType(ExchangeRateType exchangeRateType) {
// if (_exchangeRateType != exchangeRateType) {
// switch (exchangeRateType) {
// case ExchangeRateType.estimated:
// DB.instance.put<dynamic>(
// boxName: DB.boxNamePrefs,
// key: "exchangeRateType",
// value: "estimated");
// break;
// case ExchangeRateType.fixed:
// DB.instance.put<dynamic>(
// boxName: DB.boxNamePrefs,
// key: "exchangeRateType",
// value: "fixed");
// break;
// }
// _exchangeRateType = exchangeRateType;
// notifyListeners();
// }
// }
//
// Future<ExchangeRateType> _getExchangeRateType() async {
// String? rate = await DB.instance.get<dynamic>(
// boxName: DB.boxNamePrefs, key: "exchangeRateType") as String?;
// rate ??= "estimated";
// switch (rate) {
// case "estimated":
// return ExchangeRateType.estimated;
// case "fixed":
// return ExchangeRateType.fixed;
// default:
// throw Exception("Invalid exchange rate type found in prefs!");
// }
// }
// use biometrics
bool _useBiometrics = false;
bool get useBiometrics => _useBiometrics;
set useBiometrics(bool useBiometrics) {
if (_useBiometrics != useBiometrics) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "useBiometrics", value: useBiometrics);
_useBiometrics = useBiometrics;
notifyListeners();
}
}
Future<bool> _getUseBiometrics() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "useBiometrics") as bool? ??
false;
}
// has set up pin
bool _hasPin = false;
bool get hasPin => _hasPin;
set hasPin(bool hasPin) {
if (_hasPin != hasPin) {
DB.instance
.put<dynamic>(boxName: DB.boxNamePrefs, key: "hasPin", value: hasPin);
_hasPin = hasPin;
notifyListeners();
}
}
Future<bool> _getHasPin() async {
return await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "hasPin") as bool? ??
false;
}
// familiarity
int _familiarity = 0;
int get familiarity => _familiarity;
set familiarity(int familiarity) {
if (_familiarity != familiarity) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "familiarity", value: familiarity);
_familiarity = familiarity;
notifyListeners();
}
}
Future<int> _getHasFamiliarity() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "familiarity") as int? ??
0;
}
// show testnet coins
bool _showTestNetCoins = false;
bool get showTestNetCoins => _showTestNetCoins;
set showTestNetCoins(bool showTestNetCoins) {
if (_showTestNetCoins != showTestNetCoins) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "showTestNetCoins",
value: showTestNetCoins);
_showTestNetCoins = showTestNetCoins;
notifyListeners();
}
}
Future<bool> _getShowTestNetCoins() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "showTestNetCoins") as bool? ??
false;
}
// auto backup
bool _isAutoBackupEnabled = false;
bool get isAutoBackupEnabled => _isAutoBackupEnabled;
set isAutoBackupEnabled(bool isAutoBackupEnabled) {
if (_isAutoBackupEnabled != isAutoBackupEnabled) {
DB.instance
.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "isAutoBackupEnabled",
value: isAutoBackupEnabled)
.then((_) {
_isAutoBackupEnabled = isAutoBackupEnabled;
notifyListeners();
});
}
}
Future<bool> _getIsAutoBackupEnabled() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "isAutoBackupEnabled") as bool? ??
false;
}
// auto backup file location uri
String? _autoBackupLocation;
String? get autoBackupLocation => _autoBackupLocation;
set autoBackupLocation(String? autoBackupLocation) {
if (this.autoBackupLocation != autoBackupLocation) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "autoBackupLocation",
value: autoBackupLocation);
_autoBackupLocation = autoBackupLocation;
notifyListeners();
}
}
Future<String?> _getAutoBackupLocation() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "autoBackupLocation") as String?;
}
// auto backup frequency type
BackupFrequencyType _backupFrequencyType =
BackupFrequencyType.everyTenMinutes;
BackupFrequencyType get backupFrequencyType => _backupFrequencyType;
set backupFrequencyType(BackupFrequencyType backupFrequencyType) {
if (_backupFrequencyType != backupFrequencyType) {
switch (backupFrequencyType) {
case BackupFrequencyType.everyTenMinutes:
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "backupFrequencyType",
value: "10Min");
break;
case BackupFrequencyType.everyAppStart:
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "backupFrequencyType",
value: "onStart");
break;
case BackupFrequencyType.afterClosingAWallet:
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "backupFrequencyType",
value: "onWalletClose");
break;
}
_backupFrequencyType = backupFrequencyType;
notifyListeners();
}
}
Future<BackupFrequencyType> _getBackupFrequencyType() async {
String? rate = await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "backupFrequencyType") as String?;
rate ??= "10Min";
switch (rate) {
case "10Min":
return BackupFrequencyType.everyTenMinutes;
case "onStart":
return BackupFrequencyType.everyAppStart;
case "onWalletClose":
return BackupFrequencyType.afterClosingAWallet;
default:
throw Exception("Invalid Backup Frequency type found in prefs!");
}
}
// auto backup last time stamp
DateTime? _lastAutoBackup;
DateTime? get lastAutoBackup => _lastAutoBackup;
set lastAutoBackup(DateTime? lastAutoBackup) {
if (this.lastAutoBackup != lastAutoBackup) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "lastAutoBackup",
value: lastAutoBackup);
_lastAutoBackup = lastAutoBackup;
notifyListeners();
}
}
Future<DateTime?> _getLastAutoBackup() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "autoBackupFileUri") as DateTime?;
}
// auto backup
bool _hideBlockExplorerWarning = false;
bool get hideBlockExplorerWarning => _hideBlockExplorerWarning;
set hideBlockExplorerWarning(bool hideBlockExplorerWarning) {
if (_hideBlockExplorerWarning != hideBlockExplorerWarning) {
DB.instance
.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "hideBlockExplorerWarning",
value: hideBlockExplorerWarning)
.then((_) {
_hideBlockExplorerWarning = hideBlockExplorerWarning;
notifyListeners();
});
}
}
Future<bool> _getHideBlockExplorerWarning() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs,
key: "hideBlockExplorerWarning") as bool? ??
false;
}
// auto backup
bool _gotoWalletOnStartup = false;
bool get gotoWalletOnStartup => _gotoWalletOnStartup;
set gotoWalletOnStartup(bool gotoWalletOnStartup) {
if (_gotoWalletOnStartup != gotoWalletOnStartup) {
DB.instance
.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "gotoWalletOnStartup",
value: gotoWalletOnStartup)
.then((_) {
_gotoWalletOnStartup = gotoWalletOnStartup;
notifyListeners();
});
}
}
Future<bool> _getGotoWalletOnStartup() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "gotoWalletOnStartup") as bool? ??
false;
}
// startup wallet id
String? _startupWalletId;
String? get startupWalletId => _startupWalletId;
set startupWalletId(String? startupWalletId) {
if (this.startupWalletId != startupWalletId) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "startupWalletId",
value: startupWalletId);
_startupWalletId = startupWalletId;
notifyListeners();
}
}
Future<String?> _getStartupWalletId() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "startupWalletId") as String?;
}
// incognito mode off by default
// allow external network calls such as exchange data and price info
bool _externalCalls = true;
bool get externalCalls => _externalCalls;
set externalCalls(bool externalCalls) {
if (_externalCalls != externalCalls) {
DB.instance
.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "externalCalls",
value: externalCalls)
.then((_) {
_externalCalls = externalCalls;
notifyListeners();
});
}
}
Future<bool> _getHasExternalCalls() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "externalCalls") as bool? ??
true;
}
Future<bool> isExternalCallsSet() async {
if (await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "externalCalls") ==
null) {
return false;
}
return true;
}
String? _userId;
String? get userID => _userId;
Future<String?> _getUserId() async {
String? userID = await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "userID") as String?;
if (userID == null) {
userID = const Uuid().v4();
await saveUserID(userID);
}
return userID;
}
Future<void> saveUserID(String userId) async {
_userId = userId;
await DB.instance
.put<dynamic>(boxName: DB.boxNamePrefs, key: "userID", value: _userId);
// notifyListeners();
}
int? _signupEpoch;
int? get signupEpoch => _signupEpoch;
Future<int?> _getSignupEpoch() async {
int? signupEpoch = await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "signupEpoch") as int?;
if (signupEpoch == null) {
signupEpoch = DateTime.now().millisecondsSinceEpoch ~/
Duration.millisecondsPerSecond;
await saveSignupEpoch(signupEpoch);
}
return signupEpoch;
}
Future<void> saveSignupEpoch(int signupEpoch) async {
_signupEpoch = signupEpoch;
await DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "signupEpoch", value: _signupEpoch);
// notifyListeners();
}
// show testnet coins
bool _enableCoinControl = false;
bool get enableCoinControl => _enableCoinControl;
set enableCoinControl(bool enableCoinControl) {
if (_enableCoinControl != enableCoinControl) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "enableCoinControl",
value: enableCoinControl);
_enableCoinControl = enableCoinControl;
notifyListeners();
}
}
Future<bool> _getEnableCoinControl() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "enableCoinControl") as bool? ??
false;
}
// follow system brightness
bool _enableSystemBrightness = false;
bool get enableSystemBrightness => _enableSystemBrightness;
set enableSystemBrightness(bool enableSystemBrightness) {
if (_enableSystemBrightness != enableSystemBrightness) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "enableSystemBrightness",
value: enableSystemBrightness);
_enableSystemBrightness = enableSystemBrightness;
notifyListeners();
}
}
Future<bool> _getEnableSystemBrightness() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "enableSystemBrightness") as bool? ??
false;
}
// system brightness light theme name
ThemeType _theme = ThemeType.light;
ThemeType get theme => _theme;
set theme(ThemeType theme) {
if (this.theme != theme) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "theme", value: theme.name);
_theme = theme;
notifyListeners();
}
}
Future<ThemeType> _getTheme() async {
return ThemeTypeExt.fromName(await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "theme") as String? ??
ThemeType.light.name);
}
// system brightness light theme name
ThemeType _systemBrightnessLightTheme = ThemeType.light;
ThemeType get systemBrightnessLightTheme => _systemBrightnessLightTheme;
set systemBrightnessLightTheme(ThemeType systemBrightnessLightTheme) {
if (this.systemBrightnessLightTheme != systemBrightnessLightTheme) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "systemBrightnessLightTheme",
value: systemBrightnessLightTheme.name);
_systemBrightnessLightTheme = systemBrightnessLightTheme;
notifyListeners();
}
}
Future<ThemeType> _getSystemBrightnessLightTheme() async {
return ThemeTypeExt.fromName(await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs,
key: "systemBrightnessLightTheme") as String? ??
ThemeType.light.name);
}
// system brightness dark theme name
ThemeType _systemBrightnessDarkTheme = ThemeType.dark;
ThemeType get systemBrightnessDarkTheme => _systemBrightnessDarkTheme;
set systemBrightnessDarkTheme(ThemeType systemBrightnessDarkTheme) {
if (this.systemBrightnessDarkTheme != systemBrightnessDarkTheme) {
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "systemBrightnessDarkTheme",
value: systemBrightnessDarkTheme.name);
_systemBrightnessDarkTheme = systemBrightnessDarkTheme;
notifyListeners();
}
}
Future<ThemeType> _getSystemBrightnessDarkTheme() async {
return ThemeTypeExt.fromName(await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs,
key: "systemBrightnessDarkTheme") as String? ??
ThemeType.dark.name);
}
}