Modify Themes Startup Behaviour (#2288)

* feat(themes): Reflect current system theme at the start of the app if the themeMode is system mode

* feat(themes): Extract platform awareness for router into a function, and use where needed
This commit is contained in:
David Adegoke 2025-05-26 02:43:15 +01:00 committed by GitHub
parent df88914628
commit d342173239
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 212 additions and 282 deletions

View file

@ -150,84 +150,78 @@ import 'src/screens/dashboard/pages/nft_import_page.dart';
late RouteSettings currentRouteSettings;
Route<dynamic> handleRouteWithPlatformAwareness(
Widget Function(BuildContext) builder, {
bool fullscreenDialog = false,
}) {
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: builder, fullscreenDialog: fullscreenDialog);
} else {
return MaterialPageRoute<void>(builder: builder, fullscreenDialog: fullscreenDialog);
}
}
Route<dynamic> createRoute(RouteSettings settings) {
currentRouteSettings = settings;
switch (settings.name) {
case Routes.welcome:
return MaterialPageRoute<void>(
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<void>(
builder: (_) =>
getIt.get<SetupPinCodePage>(param1: (PinCodeState<PinCodeWidget> context, dynamic _) {
Navigator.of(context.context).pushNamed(Routes.welcomePage);
}),
fullscreenDialog: true);
else return MaterialPageRoute<void>(
builder: (_) =>
getIt.get<SetupPinCodePage>(param1: (PinCodeState<PinCodeWidget> context, dynamic _) {
Navigator.of(context.context).pushNamed(Routes.welcomePage);
}),
fullscreenDialog: true);
return handleRouteWithPlatformAwareness(
(_) => getIt.get<SetupPinCodePage>(
param1: (PinCodeState<PinCodeWidget> context, dynamic _) {
Navigator.of(context.context).pushNamed(Routes.welcomePage);
},
),
fullscreenDialog: true,
);
case Routes.welcomePage:
return CupertinoPageRoute<void>(builder: (_) => getIt.get<WelcomePage>());
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<void>(
builder: (_) => getIt.get<NewWalletTypePage>(
param1: NewWalletTypeArguments(
onTypeSelected: (BuildContext context, WalletType type) =>
Navigator.of(context).pushNamed(
Routes.newWallet,
arguments: NewWalletArguments(type: type),
),
isCreate: true,
isHardwareWallet: false,
),
),
);
} else {
return MaterialPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>(
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<NewWalletTypePage>(
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<WalletGroupsDisplayViewModel>(param1: type);
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => WalletGroupsDisplayPage(walletGroupsDisplayVM));
else return MaterialPageRoute<void>(builder: (_) => WalletGroupsDisplayPage(walletGroupsDisplayVM));
return handleRouteWithPlatformAwareness(
(_) => WalletGroupsDisplayPage(
walletGroupsDisplayVM,
),
);
case Routes.newWallet:
final args = settings.arguments as NewWalletArguments;
@ -235,15 +229,8 @@ Route<dynamic> createRoute(RouteSettings settings) {
final walletNewVM = getIt.get<WalletNewVM>(param1: args);
final seedSettingsViewModel = getIt.get<SeedSettingsViewModel>();
if (Platform.isIOS) return CupertinoPageRoute<void>(
builder: (_) => NewWalletPage(
walletNewVM,
seedSettingsViewModel,
isChildWallet: args.isChildWallet,
),
);
else return MaterialPageRoute<void>(
builder: (_) => NewWalletPage(
return handleRouteWithPlatformAwareness(
(_) => NewWalletPage(
walletNewVM,
seedSettingsViewModel,
isChildWallet: args.isChildWallet,
@ -267,27 +254,18 @@ Route<dynamic> createRoute(RouteSettings settings) {
callback = settings.arguments as Function(PinCodeState<PinCodeWidget>, String);
}
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => getIt.get<SetupPinCodePage>(param1: callback));
else return MaterialPageRoute<void>(builder: (_) => getIt.get<SetupPinCodePage>(param1: callback));
return handleRouteWithPlatformAwareness(
(_) => getIt.get<SetupPinCodePage>(param1: callback),
);
case Routes.restoreWalletType:
if (Platform.isIOS) return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>(
return handleRouteWithPlatformAwareness(
(_) => getIt.get<NewWalletTypePage>(
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<void>(
builder: (_) => getIt.get<NewWalletTypePage>(
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<dynamic> createRoute(RouteSettings settings) {
}
final isNewInstall = settings.arguments as bool;
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<RestoreOptionsPage>(param1: isNewInstall));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<RestoreOptionsPage>(param1: isNewInstall));
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<RestoreOptionsPage>(param1: isNewInstall),
);
case Routes.restoreWalletFromSeedKeys:
if (isSingleCoin) {
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<WalletRestorePage>(param1: availableWalletTypes.first));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<WalletRestorePage>(param1: availableWalletTypes.first));
}
}
if (Platform.isIOS) {
return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>(
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<void>(
builder: (_) => getIt.get<NewWalletTypePage>(
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<WalletRestorePage>(param1: availableWalletTypes.first),
);
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<NewWalletTypePage>(
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<dynamic> 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<LedgerViewModel>(),
@ -362,15 +322,12 @@ Route<dynamic> 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<dynamic> createRoute(RouteSettings settings) {
);
case Routes.seed:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<WalletSeedPage>(param1: settings.arguments as bool));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<WalletSeedPage>(param1: settings.arguments as bool));
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<WalletSeedPage>(param1: settings.arguments as bool),
);
case Routes.restoreWallet:
final args = settings.arguments as Map<String, dynamic>?;
@ -421,29 +376,24 @@ Route<dynamic> createRoute(RouteSettings settings) {
final initialPaymentRequest = args?['paymentRequest'] as PaymentRequest?;
final coinTypeToSpendFrom = args?['coinTypeToSpendFrom'] as UnspentCoinType?;
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<SendPage>(
return handleRouteWithPlatformAwareness(
(context) => getIt.get<SendPage>(
param1: initialPaymentRequest,
param2: coinTypeToSpendFrom,
));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<SendPage>(
param1: initialPaymentRequest,
param2: coinTypeToSpendFrom,
));
}
),
);
case Routes.sendTemplate:
return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<SendTemplatePage>());
case Routes.receive:
return CupertinoPageRoute<void>(builder: (context) => getIt.get<ReceivePage>());
return CupertinoPageRoute<void>(builder: (context) => getIt.get<ReceivePage>());
case Routes.addressPage:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (context) => getIt.get<AddressPage>());
else return MaterialPageRoute<void>(builder: (context) => getIt.get<AddressPage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<AddressPage>(),
);
case Routes.transactionDetails:
return CupertinoPageRoute<void>(
@ -529,41 +479,39 @@ Route<dynamic> createRoute(RouteSettings settings) {
onWillPop: () async => false));
case Routes.silentPaymentsSettings:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (context) => getIt.get<SilentPaymentsSettingsPage>());
else return MaterialPageRoute<void>(builder: (context) => getIt.get<SilentPaymentsSettingsPage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<SilentPaymentsSettingsPage>(),
);
case Routes.mwebSettings:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (context) => getIt.get<MwebSettingsPage>());
else return MaterialPageRoute<void>(builder: (context) => getIt.get<MwebSettingsPage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<MwebSettingsPage>(),
);
case Routes.mwebLogs:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (context) => getIt.get<MwebLogsPage>());
else return MaterialPageRoute<void>(builder: (context) => getIt.get<MwebLogsPage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<MwebLogsPage>(),
);
case Routes.mwebNode:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (context) => getIt.get<MwebNodePage>());
else return MaterialPageRoute<void>(builder: (context) => getIt.get<MwebNodePage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<MwebNodePage>(),
);
case Routes.connectionSync:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<ConnectionSyncPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<ConnectionSyncPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<ConnectionSyncPage>(),
);
case Routes.securityBackupPage:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<SecurityBackupPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<SecurityBackupPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<SecurityBackupPage>(),
);
case Routes.privacyPage:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<PrivacyPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<PrivacyPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<PrivacyPage>(),
);
case Routes.trocadorProvidersPage:
return CupertinoPageRoute<void>(
@ -574,18 +522,14 @@ Route<dynamic> createRoute(RouteSettings settings) {
fullscreenDialog: true, builder: (_) => getIt.get<DomainLookupsPage>());
case Routes.displaySettingsPage:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<DisplaySettingsPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<DisplaySettingsPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<DisplaySettingsPage>(),
);
case Routes.otherSettingsPage:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<OtherSettingsPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<OtherSettingsPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<OtherSettingsPage>(),
);
case Routes.newNode:
final args = settings.arguments as Map<String, dynamic>?;
@ -622,12 +566,9 @@ Route<dynamic> createRoute(RouteSettings settings) {
getIt.get<NanoAccountEditOrCreatePage>(param1: settings.arguments as NanoAccount?));
case Routes.addressBook:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<ContactListPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<ContactListPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<ContactListPage>(),
);
case Routes.pickerAddressBook:
final selectedCurrency = settings.arguments as CryptoCurrency?;
@ -638,19 +579,14 @@ Route<dynamic> createRoute(RouteSettings settings) {
return MaterialPageRoute<void>(builder: (_) => getIt.get<AddressListPage>());
case Routes.addressBookAddContact:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<ContactPage>(param1: settings.arguments as ContactRecord?));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<ContactPage>(param1: settings.arguments as ContactRecord?));
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<ContactPage>(param1: settings.arguments as ContactRecord?),
);
case Routes.showKeys:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<WalletKeysPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<WalletKeysPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<WalletKeysPage>(),
);
case Routes.exchangeTrade:
return CupertinoPageRoute<void>(builder: (_) => getIt.get<ExchangeTradePage>());
@ -669,11 +605,9 @@ Route<dynamic> createRoute(RouteSettings settings) {
case Routes.buySellPage:
final args = settings.arguments as bool;
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<BuySellPage>(param1: args));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<BuySellPage>(param1: args));
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<BuySellPage>(param1: args),
);
case Routes.buyOptionsPage:
final args = settings.arguments as List;
@ -681,7 +615,8 @@ Route<dynamic> createRoute(RouteSettings settings) {
case Routes.paymentMethodOptionsPage:
final args = settings.arguments as List;
return MaterialPageRoute<void>(builder: (_) => getIt.get<PaymentMethodOptionsPage>(param1: args));
return MaterialPageRoute<void>(
builder: (_) => getIt.get<PaymentMethodOptionsPage>(param1: args));
case Routes.buyWebView:
final args = settings.arguments as List;
@ -690,12 +625,9 @@ Route<dynamic> createRoute(RouteSettings settings) {
fullscreenDialog: true, builder: (_) => getIt.get<BuyWebViewPage>(param1: args));
case Routes.exchange:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<ExchangePage>(param1: settings.arguments as PaymentRequest?));
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<ExchangePage>(param1: settings.arguments as PaymentRequest?));
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<ExchangePage>(param1: settings.arguments as PaymentRequest?),
);
case Routes.exchangeTemplate:
return CupertinoPageRoute<void>(builder: (_) => getIt.get<ExchangeTemplatePage>());
@ -717,11 +649,9 @@ Route<dynamic> createRoute(RouteSettings settings) {
builder: (_) => getIt.get<TransactionSuccessPage>(param1: settings.arguments as String));
case Routes.backup:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<BackupPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<BackupPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<BackupPage>(),
);
case Routes.editBackupPassword:
return CupertinoPageRoute<void>(builder: (_) => getIt.get<EditBackupPasswordPage>());
@ -731,26 +661,23 @@ Route<dynamic> createRoute(RouteSettings settings) {
fullscreenDialog: true, builder: (_) => getIt.get<RestoreFromBackupPage>());
case Routes.support:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<SupportPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<SupportPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<SupportPage>(),
);
case Routes.supportLiveChat:
return CupertinoPageRoute<void>(builder: (_) => getIt.get<SupportChatPage>());
case Routes.supportOtherLinks:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<SupportOtherLinksPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<SupportOtherLinksPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<SupportOtherLinksPage>(),
);
case Routes.unspentCoinsList:
final coinTypeToSpendFrom = settings.arguments as UnspentCoinType?;
return MaterialPageRoute<void>(
builder: (_) => getIt.get<UnspentCoinsListPage>(param1: coinTypeToSpendFrom));
return handleRouteWithPlatformAwareness(
(context) => getIt.get<UnspentCoinsListPage>(param1: coinTypeToSpendFrom),
);
case Routes.unspentCoinsDetails:
final args = settings.arguments as List;
@ -765,32 +692,37 @@ Route<dynamic> createRoute(RouteSettings settings) {
));
case Routes.cakePayCardsPage:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (context) => getIt.get<CakePayCardsPage>());
else return MaterialPageRoute<void>(builder: (context) => getIt.get<CakePayCardsPage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<CakePayCardsPage>(),
);
case Routes.cakePayBuyCardPage:
final args = settings.arguments as List;
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => getIt.get<CakePayBuyCardPage>(param1: args));
else return MaterialPageRoute<void>(builder: (_) => getIt.get<CakePayBuyCardPage>(param1: args));
return handleRouteWithPlatformAwareness(
(context) => getIt.get<CakePayBuyCardPage>(param1: args),
);
case Routes.cakePayBuyCardDetailPage:
final args = settings.arguments as List;
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => getIt.get<CakePayBuyCardDetailPage>(param1: args));
else return MaterialPageRoute<void>(builder: (_) => getIt.get<CakePayBuyCardDetailPage>(param1: args));
return handleRouteWithPlatformAwareness(
(context) => getIt.get<CakePayBuyCardDetailPage>(param1: args),
);
case Routes.cakePayWelcomePage:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => getIt.get<CakePayWelcomePage>(),);
else return MaterialPageRoute<void>(builder: (_) => getIt.get<CakePayWelcomePage>(),);
return handleRouteWithPlatformAwareness(
(context) => getIt.get<CakePayWelcomePage>(),
);
case Routes.cakePayVerifyOtpPage:
final args = settings.arguments as List;
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => getIt.get<CakePayVerifyOtpPage>(param1: args));
else return MaterialPageRoute<void>(builder: (_) => getIt.get<CakePayVerifyOtpPage>(param1: args));
return handleRouteWithPlatformAwareness(
(context) => getIt.get<CakePayVerifyOtpPage>(param1: args),
);
case Routes.cakePayAccountPage:
if (Platform.isIOS) return CupertinoPageRoute<void>(builder: (_) => getIt.get<CakePayAccountPage>());
else return MaterialPageRoute<void>(builder: (_) => getIt.get<CakePayAccountPage>());
return handleRouteWithPlatformAwareness(
(context) => getIt.get<CakePayAccountPage>(),
);
case Routes.webViewPage:
final args = settings.arguments as List;
@ -808,28 +740,18 @@ Route<dynamic> createRoute(RouteSettings settings) {
final toggleTestnet = args['toggleTestnet'] as Function(bool? val);
final restoredWallet = args['restoredWallet'] as RestoredWallet?;
if (Platform.isIOS) return CupertinoPageRoute<void>(
builder: (_) => AdvancedPrivacySettingsPage(
isFromRestore: isFromRestore,
isChildWallet: isChildWallet,
useTestnet: useTestnet,
toggleUseTestnet: toggleTestnet,
advancedPrivacySettingsViewModel:
getIt.get<AdvancedPrivacySettingsViewModel>(param1: type),
nodeViewModel: getIt.get<NodeCreateOrEditViewModel>(param1: type, param2: false),
seedSettingsViewModel: getIt.get<SeedSettingsViewModel>(),
));
else return MaterialPageRoute<void>(
builder: (_) => AdvancedPrivacySettingsPage(
isFromRestore: isFromRestore,
isChildWallet: isChildWallet,
useTestnet: useTestnet,
toggleUseTestnet: toggleTestnet,
advancedPrivacySettingsViewModel:
getIt.get<AdvancedPrivacySettingsViewModel>(param1: type),
nodeViewModel: getIt.get<NodeCreateOrEditViewModel>(param1: type, param2: false),
seedSettingsViewModel: getIt.get<SeedSettingsViewModel>(),
));
return handleRouteWithPlatformAwareness(
(context) => AdvancedPrivacySettingsPage(
isFromRestore: isFromRestore,
isChildWallet: isChildWallet,
useTestnet: useTestnet,
toggleUseTestnet: toggleTestnet,
advancedPrivacySettingsViewModel:
getIt.get<AdvancedPrivacySettingsViewModel>(param1: type),
nodeViewModel: getIt.get<NodeCreateOrEditViewModel>(param1: type, param2: false),
seedSettingsViewModel: getIt.get<SeedSettingsViewModel>(),
),
);
case Routes.anonPayInvoicePage:
final args = settings.arguments as List;
@ -850,8 +772,8 @@ Route<dynamic> createRoute(RouteSettings settings) {
final sessionId = arguments.first as String;
final transactionInfo = arguments[1] as TransactionInfo?;
return CupertinoPageRoute<void>(
builder: (_) => getIt.get<PayjoinDetailsPage>(
param1: sessionId, param2: transactionInfo));
builder: (_) =>
getIt.get<PayjoinDetailsPage>(param1: sessionId, param2: transactionInfo));
case Routes.desktop_actions:
return PageRouteBuilder(
@ -884,7 +806,8 @@ Route<dynamic> createRoute(RouteSettings settings) {
return MaterialPageRoute<void>(builder: (_) => getIt.get<Setup2FAInfoPage>());
case Routes.urqrAnimatedPage:
return MaterialPageRoute<void>(builder: (_) => getIt.get<AnimatedURPage>(param1: settings.arguments));
return MaterialPageRoute<void>(
builder: (_) => getIt.get<AnimatedURPage>(param1: settings.arguments));
case Routes.homeSettings:
return CupertinoPageRoute<void>(
@ -964,14 +887,15 @@ Route<dynamic> createRoute(RouteSettings settings) {
);
case Routes.exchangeTradeExternalSendPage:
return MaterialPageRoute<void>(builder: (_) => getIt.get<ExchangeTradeExternalSendPage>(),);
return MaterialPageRoute<void>(
builder: (_) => getIt.get<ExchangeTradeExternalSendPage>(),
);
case Routes.backgroundSync:
if (Platform.isIOS) {
return CupertinoPageRoute<void>(builder: (context) => getIt.get<BackgroundSyncPage>());
} else {
return MaterialPageRoute<void>(builder: (context) => getIt.get<BackgroundSyncPage>());
}
return handleRouteWithPlatformAwareness(
(context) => getIt.get<BackgroundSyncPage>(),
);
case Routes.devMoneroBackgroundSync:
return MaterialPageRoute<void>(
builder: (_) => getIt.get<DevMoneroBackgroundSyncPage>(),

View file

@ -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),

View file

@ -40,17 +40,22 @@ abstract class ThemeStoreBase with Store {
}
@action
Future<void> setThemeMode(ThemeMode mode, {bool shouldRefreshTheme = true}) async {
Future<void> 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<void> _saveThemeModeToPrefs(ThemeMode mode) async {
await sharedPreferences.setString(PreferencesKey.themeMode, mode.toString());
}
/// Loads the saved theme preferences
Future<void> loadThemePreferences() async {
sharedPreferences = await SharedPreferences.getInstance();
@ -95,7 +100,7 @@ abstract class ThemeStoreBase with Store {
/// Handles theme loading for mobile platforms
Future<void> _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<void> _setSystemTheme() async {
Future<void> _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;
}