diff --git a/lib/router.dart b/lib/router.dart index 5125167ce..4150c239f 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -150,84 +150,78 @@ import 'src/screens/dashboard/pages/nft_import_page.dart'; late RouteSettings currentRouteSettings; +Route handleRouteWithPlatformAwareness( + Widget Function(BuildContext) builder, { + bool fullscreenDialog = false, +}) { + if (Platform.isIOS) { + return CupertinoPageRoute(builder: builder, fullscreenDialog: fullscreenDialog); + } else { + return MaterialPageRoute(builder: builder, fullscreenDialog: fullscreenDialog); + } +} + Route createRoute(RouteSettings settings) { currentRouteSettings = settings; switch (settings.name) { case Routes.welcome: return MaterialPageRoute( - builder: (_) => CreatePinWelcomePage(SettingsStoreBase.walletPasswordDirectInput)); + builder: (_) => CreatePinWelcomePage( + SettingsStoreBase.walletPasswordDirectInput, + ), + ); case Routes.welcomeWallet: if (SettingsStoreBase.walletPasswordDirectInput) { return createRoute(RouteSettings(name: Routes.welcomePage)); } - if (Platform.isIOS) return CupertinoPageRoute( - builder: (_) => - getIt.get(param1: (PinCodeState context, dynamic _) { - Navigator.of(context.context).pushNamed(Routes.welcomePage); - }), - fullscreenDialog: true); - else return MaterialPageRoute( - builder: (_) => - getIt.get(param1: (PinCodeState context, dynamic _) { - Navigator.of(context.context).pushNamed(Routes.welcomePage); - }), - fullscreenDialog: true); + return handleRouteWithPlatformAwareness( + (_) => getIt.get( + param1: (PinCodeState context, dynamic _) { + Navigator.of(context.context).pushNamed(Routes.welcomePage); + }, + ), + fullscreenDialog: true, + ); case Routes.welcomePage: return CupertinoPageRoute(builder: (_) => getIt.get()); case Routes.newWalletFromWelcome: - if (isSingleCoin) { - return createRoute( - RouteSettings( + if (isSingleCoin) { + return createRoute( + RouteSettings( name: Routes.newWallet, - arguments: NewWalletArguments(type: availableWalletTypes.first) - ), - ); - } - return createRoute(RouteSettings(name: Routes.newWalletType)); - - case Routes.newWalletType: - if (Platform.isIOS) { - return CupertinoPageRoute( - builder: (_) => getIt.get( - param1: NewWalletTypeArguments( - onTypeSelected: (BuildContext context, WalletType type) => - Navigator.of(context).pushNamed( - Routes.newWallet, - arguments: NewWalletArguments(type: type), - ), - isCreate: true, - isHardwareWallet: false, - ), - ), - ); - } else { - return MaterialPageRoute( - builder: (_) => getIt.get( - param1: NewWalletTypeArguments( - onTypeSelected: (BuildContext context, WalletType type) => - Navigator.of(context).pushNamed( - Routes.newWallet, - arguments: NewWalletArguments(type: type), - ), - isCreate: true, - isHardwareWallet: false, - ), - ), + arguments: NewWalletArguments(type: availableWalletTypes.first)), ); } + return createRoute(RouteSettings(name: Routes.newWalletType)); + case Routes.newWalletType: + return handleRouteWithPlatformAwareness( + (_) => getIt.get( + param1: NewWalletTypeArguments( + onTypeSelected: (BuildContext context, WalletType type) => + Navigator.of(context).pushNamed( + Routes.newWallet, + arguments: NewWalletArguments(type: type), + ), + isCreate: true, + isHardwareWallet: false, + ), + ), + ); case Routes.walletGroupsDisplayPage: final type = settings.arguments as WalletType; final walletGroupsDisplayVM = getIt.get(param1: type); - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => WalletGroupsDisplayPage(walletGroupsDisplayVM)); - else return MaterialPageRoute(builder: (_) => WalletGroupsDisplayPage(walletGroupsDisplayVM)); - + return handleRouteWithPlatformAwareness( + (_) => WalletGroupsDisplayPage( + walletGroupsDisplayVM, + ), + ); case Routes.newWallet: final args = settings.arguments as NewWalletArguments; @@ -235,15 +229,8 @@ Route createRoute(RouteSettings settings) { final walletNewVM = getIt.get(param1: args); final seedSettingsViewModel = getIt.get(); - if (Platform.isIOS) return CupertinoPageRoute( - builder: (_) => NewWalletPage( - walletNewVM, - seedSettingsViewModel, - isChildWallet: args.isChildWallet, - ), - ); - else return MaterialPageRoute( - builder: (_) => NewWalletPage( + return handleRouteWithPlatformAwareness( + (_) => NewWalletPage( walletNewVM, seedSettingsViewModel, isChildWallet: args.isChildWallet, @@ -267,27 +254,18 @@ Route createRoute(RouteSettings settings) { callback = settings.arguments as Function(PinCodeState, String); } - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => getIt.get(param1: callback)); - else return MaterialPageRoute(builder: (_) => getIt.get(param1: callback)); + return handleRouteWithPlatformAwareness( + (_) => getIt.get(param1: callback), + ); case Routes.restoreWalletType: - if (Platform.isIOS) return CupertinoPageRoute( - builder: (_) => getIt.get( + return handleRouteWithPlatformAwareness( + (_) => getIt.get( param1: NewWalletTypeArguments( onTypeSelected: (BuildContext context, WalletType type) { final arg = {'walletType': type}; - Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg);}, - isCreate: false, - isHardwareWallet: false, - ), - ), - ); - else return MaterialPageRoute( - builder: (_) => getIt.get( - param1: NewWalletTypeArguments( - onTypeSelected: (BuildContext context, WalletType type) { - final arg = {'walletType': type}; - Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg);}, + Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg); + }, isCreate: false, isHardwareWallet: false, ), @@ -300,45 +278,28 @@ Route createRoute(RouteSettings settings) { } final isNewInstall = settings.arguments as bool; - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get(param1: isNewInstall)); - } else { - return MaterialPageRoute(builder: (context) => getIt.get(param1: isNewInstall)); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: isNewInstall), + ); case Routes.restoreWalletFromSeedKeys: if (isSingleCoin) { - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get(param1: availableWalletTypes.first)); - } else { - return MaterialPageRoute(builder: (context) => getIt.get(param1: availableWalletTypes.first)); - } - } - if (Platform.isIOS) { - return CupertinoPageRoute( - builder: (_) => getIt.get( - param1: NewWalletTypeArguments( - onTypeSelected: (BuildContext context, WalletType type) { - final arg = {'walletType': type}; - Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg);}, - isCreate: false, - isHardwareWallet: false, - ), - ), - ); - } else { - return MaterialPageRoute( - builder: (_) => getIt.get( - param1: NewWalletTypeArguments( - onTypeSelected: (BuildContext context, WalletType type) { - final arg = {'walletType': type}; - Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg);}, - isCreate: false, - isHardwareWallet: false, - ), - ), + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: availableWalletTypes.first), ); } + return handleRouteWithPlatformAwareness( + (context) => getIt.get( + param1: NewWalletTypeArguments( + onTypeSelected: (BuildContext context, WalletType type) { + final arg = {'walletType': type}; + Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg); + }, + isCreate: false, + isHardwareWallet: false, + ), + ), + ); case Routes.restoreWalletFromHardwareWallet: if (isSingleCoin) { @@ -346,10 +307,9 @@ Route createRoute(RouteSettings settings) { builder: (_) => ConnectDevicePage( ConnectDevicePageParams( walletType: availableWalletTypes.first, - onConnectDevice: (BuildContext context, _) => - Navigator.of(context).pushNamed( - Routes.chooseHardwareWalletAccount, - arguments: [availableWalletTypes.first]), + onConnectDevice: (BuildContext context, _) => Navigator.of(context).pushNamed( + Routes.chooseHardwareWalletAccount, + arguments: [availableWalletTypes.first]), isReconnect: false, ), getIt.get(), @@ -362,15 +322,12 @@ Route createRoute(RouteSettings settings) { onTypeSelected: (BuildContext context, WalletType type) { final arguments = ConnectDevicePageParams( walletType: type, - onConnectDevice: (BuildContext context, _) => - Navigator.of(context).pushNamed( - Routes.chooseHardwareWalletAccount, - arguments: [type]), + onConnectDevice: (BuildContext context, _) => Navigator.of(context) + .pushNamed(Routes.chooseHardwareWalletAccount, arguments: [type]), isReconnect: false, ); - Navigator.of(context) - .pushNamed(Routes.connectDevices, arguments: arguments); + Navigator.of(context).pushNamed(Routes.connectDevices, arguments: arguments); }, isCreate: false, isHardwareWallet: true, @@ -391,11 +348,9 @@ Route createRoute(RouteSettings settings) { ); case Routes.seed: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get(param1: settings.arguments as bool)); - } else { - return MaterialPageRoute(builder: (context) => getIt.get(param1: settings.arguments as bool)); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: settings.arguments as bool), + ); case Routes.restoreWallet: final args = settings.arguments as Map?; @@ -421,29 +376,24 @@ Route createRoute(RouteSettings settings) { final initialPaymentRequest = args?['paymentRequest'] as PaymentRequest?; final coinTypeToSpendFrom = args?['coinTypeToSpendFrom'] as UnspentCoinType?; - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get( + return handleRouteWithPlatformAwareness( + (context) => getIt.get( param1: initialPaymentRequest, param2: coinTypeToSpendFrom, - )); - } else { - return MaterialPageRoute(builder: (context) => getIt.get( - param1: initialPaymentRequest, - param2: coinTypeToSpendFrom, - )); - } + ), + ); case Routes.sendTemplate: return CupertinoPageRoute( fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.receive: - return CupertinoPageRoute(builder: (context) => getIt.get()); + return CupertinoPageRoute(builder: (context) => getIt.get()); case Routes.addressPage: - if (Platform.isIOS) return CupertinoPageRoute(builder: (context) => getIt.get()); - else return MaterialPageRoute(builder: (context) => getIt.get()); - + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.transactionDetails: return CupertinoPageRoute( @@ -529,41 +479,39 @@ Route createRoute(RouteSettings settings) { onWillPop: () async => false)); case Routes.silentPaymentsSettings: - if (Platform.isIOS) return CupertinoPageRoute(builder: (context) => getIt.get()); - else return MaterialPageRoute(builder: (context) => getIt.get()); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.mwebSettings: - if (Platform.isIOS) return CupertinoPageRoute(builder: (context) => getIt.get()); - else return MaterialPageRoute(builder: (context) => getIt.get()); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.mwebLogs: - if (Platform.isIOS) return CupertinoPageRoute(builder: (context) => getIt.get()); - else return MaterialPageRoute(builder: (context) => getIt.get()); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.mwebNode: - if (Platform.isIOS) return CupertinoPageRoute(builder: (context) => getIt.get()); - else return MaterialPageRoute(builder: (context) => getIt.get()); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.connectionSync: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.securityBackupPage: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.privacyPage: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.trocadorProvidersPage: return CupertinoPageRoute( @@ -574,18 +522,14 @@ Route createRoute(RouteSettings settings) { fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.displaySettingsPage: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.otherSettingsPage: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.newNode: final args = settings.arguments as Map?; @@ -622,12 +566,9 @@ Route createRoute(RouteSettings settings) { getIt.get(param1: settings.arguments as NanoAccount?)); case Routes.addressBook: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } - + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.pickerAddressBook: final selectedCurrency = settings.arguments as CryptoCurrency?; @@ -638,19 +579,14 @@ Route createRoute(RouteSettings settings) { return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.addressBookAddContact: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get(param1: settings.arguments as ContactRecord?)); - } else { - return MaterialPageRoute(builder: (context) => getIt.get(param1: settings.arguments as ContactRecord?)); - } - + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: settings.arguments as ContactRecord?), + ); case Routes.showKeys: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.exchangeTrade: return CupertinoPageRoute(builder: (_) => getIt.get()); @@ -669,11 +605,9 @@ Route createRoute(RouteSettings settings) { case Routes.buySellPage: final args = settings.arguments as bool; - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get(param1: args)); - } else { - return MaterialPageRoute(builder: (context) => getIt.get(param1: args)); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: args), + ); case Routes.buyOptionsPage: final args = settings.arguments as List; @@ -681,7 +615,8 @@ Route createRoute(RouteSettings settings) { case Routes.paymentMethodOptionsPage: final args = settings.arguments as List; - return MaterialPageRoute(builder: (_) => getIt.get(param1: args)); + return MaterialPageRoute( + builder: (_) => getIt.get(param1: args)); case Routes.buyWebView: final args = settings.arguments as List; @@ -690,12 +625,9 @@ Route createRoute(RouteSettings settings) { fullscreenDialog: true, builder: (_) => getIt.get(param1: args)); case Routes.exchange: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get(param1: settings.arguments as PaymentRequest?)); - } else { - return MaterialPageRoute(builder: (context) => getIt.get(param1: settings.arguments as PaymentRequest?)); - } - + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: settings.arguments as PaymentRequest?), + ); case Routes.exchangeTemplate: return CupertinoPageRoute(builder: (_) => getIt.get()); @@ -717,11 +649,9 @@ Route createRoute(RouteSettings settings) { builder: (_) => getIt.get(param1: settings.arguments as String)); case Routes.backup: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.editBackupPassword: return CupertinoPageRoute(builder: (_) => getIt.get()); @@ -731,26 +661,23 @@ Route createRoute(RouteSettings settings) { fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.support: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.supportLiveChat: return CupertinoPageRoute(builder: (_) => getIt.get()); case Routes.supportOtherLinks: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.unspentCoinsList: final coinTypeToSpendFrom = settings.arguments as UnspentCoinType?; - return MaterialPageRoute( - builder: (_) => getIt.get(param1: coinTypeToSpendFrom)); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: coinTypeToSpendFrom), + ); case Routes.unspentCoinsDetails: final args = settings.arguments as List; @@ -765,32 +692,37 @@ Route createRoute(RouteSettings settings) { )); case Routes.cakePayCardsPage: - if (Platform.isIOS) return CupertinoPageRoute(builder: (context) => getIt.get()); - else return MaterialPageRoute(builder: (context) => getIt.get()); - + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.cakePayBuyCardPage: final args = settings.arguments as List; - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => getIt.get(param1: args)); - else return MaterialPageRoute(builder: (_) => getIt.get(param1: args)); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: args), + ); case Routes.cakePayBuyCardDetailPage: final args = settings.arguments as List; - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => getIt.get(param1: args)); - else return MaterialPageRoute(builder: (_) => getIt.get(param1: args)); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: args), + ); case Routes.cakePayWelcomePage: - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => getIt.get(),); - else return MaterialPageRoute(builder: (_) => getIt.get(),); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.cakePayVerifyOtpPage: final args = settings.arguments as List; - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => getIt.get(param1: args)); - else return MaterialPageRoute(builder: (_) => getIt.get(param1: args)); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(param1: args), + ); case Routes.cakePayAccountPage: - if (Platform.isIOS) return CupertinoPageRoute(builder: (_) => getIt.get()); - else return MaterialPageRoute(builder: (_) => getIt.get()); + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); case Routes.webViewPage: final args = settings.arguments as List; @@ -808,28 +740,18 @@ Route createRoute(RouteSettings settings) { final toggleTestnet = args['toggleTestnet'] as Function(bool? val); final restoredWallet = args['restoredWallet'] as RestoredWallet?; - if (Platform.isIOS) return CupertinoPageRoute( - builder: (_) => AdvancedPrivacySettingsPage( - isFromRestore: isFromRestore, - isChildWallet: isChildWallet, - useTestnet: useTestnet, - toggleUseTestnet: toggleTestnet, - advancedPrivacySettingsViewModel: - getIt.get(param1: type), - nodeViewModel: getIt.get(param1: type, param2: false), - seedSettingsViewModel: getIt.get(), - )); - else return MaterialPageRoute( - builder: (_) => AdvancedPrivacySettingsPage( - isFromRestore: isFromRestore, - isChildWallet: isChildWallet, - useTestnet: useTestnet, - toggleUseTestnet: toggleTestnet, - advancedPrivacySettingsViewModel: - getIt.get(param1: type), - nodeViewModel: getIt.get(param1: type, param2: false), - seedSettingsViewModel: getIt.get(), - )); + return handleRouteWithPlatformAwareness( + (context) => AdvancedPrivacySettingsPage( + isFromRestore: isFromRestore, + isChildWallet: isChildWallet, + useTestnet: useTestnet, + toggleUseTestnet: toggleTestnet, + advancedPrivacySettingsViewModel: + getIt.get(param1: type), + nodeViewModel: getIt.get(param1: type, param2: false), + seedSettingsViewModel: getIt.get(), + ), + ); case Routes.anonPayInvoicePage: final args = settings.arguments as List; @@ -850,8 +772,8 @@ Route createRoute(RouteSettings settings) { final sessionId = arguments.first as String; final transactionInfo = arguments[1] as TransactionInfo?; return CupertinoPageRoute( - builder: (_) => getIt.get( - param1: sessionId, param2: transactionInfo)); + builder: (_) => + getIt.get(param1: sessionId, param2: transactionInfo)); case Routes.desktop_actions: return PageRouteBuilder( @@ -884,7 +806,8 @@ Route createRoute(RouteSettings settings) { return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.urqrAnimatedPage: - return MaterialPageRoute(builder: (_) => getIt.get(param1: settings.arguments)); + return MaterialPageRoute( + builder: (_) => getIt.get(param1: settings.arguments)); case Routes.homeSettings: return CupertinoPageRoute( @@ -964,14 +887,15 @@ Route createRoute(RouteSettings settings) { ); case Routes.exchangeTradeExternalSendPage: - return MaterialPageRoute(builder: (_) => getIt.get(),); + return MaterialPageRoute( + builder: (_) => getIt.get(), + ); case Routes.backgroundSync: - if (Platform.isIOS) { - return CupertinoPageRoute(builder: (context) => getIt.get()); - } else { - return MaterialPageRoute(builder: (context) => getIt.get()); - } + return handleRouteWithPlatformAwareness( + (context) => getIt.get(), + ); + case Routes.devMoneroBackgroundSync: return MaterialPageRoute( builder: (_) => getIt.get(), diff --git a/lib/src/widgets/base_text_form_field.dart b/lib/src/widgets/base_text_form_field.dart index a9444d763..ed2d55fbd 100644 --- a/lib/src/widgets/base_text_form_field.dart +++ b/lib/src/widgets/base_text_form_field.dart @@ -125,7 +125,6 @@ class BaseTextFormField extends StatelessWidget { suffix: suffix, suffixIcon: suffixIcon, filled: !hasUnderlineBorder, - //border: !hasUnderlineBorder ? OutlineInputBorder() : null, fillColor: hasUnderlineBorder ? null : fillColor ?? Theme.of(context).colorScheme.surfaceContainer, hintStyle: placeholderTextStyle ?? @@ -162,13 +161,6 @@ class BaseTextFormField extends StatelessWidget { ), ) : null, - // OutlineInputBorder( - // borderRadius: BorderRadius.circular(10), - // borderSide: BorderSide( - // color: Theme.of(context).colorScheme.outlineVariant, - // width: 1.5, - // ) - // ), errorBorder: hasUnderlineBorder ? UnderlineInputBorder( borderSide: BorderSide(color: Theme.of(context).colorScheme.error), diff --git a/lib/themes/core/theme_store.dart b/lib/themes/core/theme_store.dart index 0058959c3..3276d6caa 100644 --- a/lib/themes/core/theme_store.dart +++ b/lib/themes/core/theme_store.dart @@ -40,17 +40,22 @@ abstract class ThemeStoreBase with Store { } @action - Future setThemeMode(ThemeMode mode, {bool shouldRefreshTheme = true}) async { + Future setThemeMode(ThemeMode mode) async { if (_themeMode == mode) return; _themeMode = mode; - await sharedPreferences.setString(PreferencesKey.themeMode, mode.toString()); - if (mode == ThemeMode.system && shouldRefreshTheme) { + await _saveThemeModeToPrefs(mode); + + if (mode == ThemeMode.system) { setTheme(getThemeFromSystem()); } } + Future _saveThemeModeToPrefs(ThemeMode mode) async { + await sharedPreferences.setString(PreferencesKey.themeMode, mode.toString()); + } + /// Loads the saved theme preferences Future loadThemePreferences() async { sharedPreferences = await SharedPreferences.getInstance(); @@ -95,7 +100,7 @@ abstract class ThemeStoreBase with Store { /// Handles theme loading for mobile platforms Future _handleMobileTheme(bool isNewInstall) async { if (isNewInstall) { - await _setSystemTheme(); + await _setSystemTheme(isNewInstall: isNewInstall); } else { await loadSavedTheme(); } @@ -112,27 +117,36 @@ abstract class ThemeStoreBase with Store { final theme = ThemeList.deserialize(raw: savedTheme); - if (_currentTheme != theme) { - await setTheme(theme); - } - final newThemeMode = _getThemeModeOnStartUp(theme, isFromBackup); + if (newThemeMode == ThemeMode.system) { + await _setSystemTheme(); + return; + } + if (_themeMode != newThemeMode) { - await setThemeMode(newThemeMode, shouldRefreshTheme: false); + await setThemeMode(newThemeMode); + } + + if (_currentTheme != theme) { + await setTheme(theme); } } catch (e) { await _setSystemTheme(); } } - Future _setSystemTheme() async { + Future _setSystemTheme({bool isNewInstall = false}) async { final systemTheme = getThemeFromSystem(); if (_currentTheme != systemTheme) { await setTheme(systemTheme); } + if (isNewInstall) { + await _saveThemeModeToPrefs(ThemeMode.system); + } + if (_themeMode != ThemeMode.system) { await setThemeMode(ThemeMode.system); } @@ -142,7 +156,7 @@ abstract class ThemeStoreBase with Store { if (isFromBackup || _themeMode != ThemeMode.system) { return theme.isDark ? ThemeMode.dark : ThemeMode.light; } - + return ThemeMode.system; }