dev
dart 1,091 lines 44.9 KB
Raw
1 import 'dart:io';
2
3 import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
4 import 'package:cake_wallet/core/new_wallet_arguments.dart';
5 import 'package:cake_wallet/new-ui/new_dashboard.dart';
6 import 'package:cake_wallet/new-ui/pages/about_page.dart';
7 import 'package:cake_wallet/new-ui/pages/bridge/bridge_history_page.dart';
8 import 'package:cake_wallet/new-ui/pages/bridge/bridge_network_page.dart';
9 import 'package:cake_wallet/new-ui/pages/bridge/bridge_receiving_wallet_page.dart';
10 import 'package:cake_wallet/new-ui/pages/coin_control_page.dart';
11 import 'package:cake_wallet/new-ui/pages/addresses_page.dart';
12 import 'package:cake_wallet/new-ui/pages/lightning_username_page.dart';
13 import "package:cake_wallet/new-ui/pages/receive_page.dart";
14 import 'package:cake_wallet/new-ui/pages/send_page.dart';
15 import 'package:cake_wallet/new-ui/widgets/hardware_wallet/sync_key_images_sheet.dart';
16 import 'package:cake_wallet/order/order.dart';
17 import 'package:cake_wallet/core/new_wallet_type_arguments.dart';
18 import 'package:cake_wallet/core/totp_request_details.dart';
19 import 'package:cake_wallet/di.dart';
20 import 'package:cake_wallet/entities/contact_record.dart';
21 import 'package:cake_wallet/entities/qr_view_data.dart';
22 import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
23 import 'package:cake_wallet/exchange/trade.dart';
24 import 'package:cake_wallet/generated/i18n.dart';
25 import 'package:cake_wallet/routes.dart';
26 import 'package:cake_wallet/src/screens/anonpay_details/anonpay_details_page.dart';
27 import 'package:cake_wallet/src/screens/auth/auth_page.dart';
28 import 'package:cake_wallet/src/screens/backup/backup_page.dart';
29 import 'package:cake_wallet/src/screens/backup/edit_backup_password_page.dart';
30 import 'package:cake_wallet/src/screens/buy/buy_sell_options_page.dart';
31 import 'package:cake_wallet/src/screens/buy/buy_webview_page.dart';
32 import 'package:cake_wallet/src/screens/buy/payment_method_options_page.dart';
33 import 'package:cake_wallet/src/screens/buy/webview_page.dart';
34 import 'package:cake_wallet/cake_pay/cake_pay.dart';
35 import 'package:cake_wallet/src/screens/connect_device/connect_device_page.dart';
36 import 'package:cake_wallet/src/screens/connect_device/monero_hardware_wallet_options_page.dart';
37 import 'package:cake_wallet/src/screens/connect_device/select_device_manufacturer_page.dart';
38 import 'package:cake_wallet/src/screens/connect_device/select_hardware_wallet_account_page.dart';
39 import 'package:cake_wallet/src/screens/contact/contact_list_page.dart';
40 import 'package:cake_wallet/src/screens/contact/contact_page.dart';
41 import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart';
42 import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/desktop_dashboard_actions.dart';
43 import 'package:cake_wallet/src/screens/dashboard/edit_token_page.dart';
44 import 'package:cake_wallet/src/screens/dashboard/home_settings_page.dart';
45 import 'package:cake_wallet/src/screens/dashboard/pages/address_page.dart';
46 import 'package:cake_wallet/src/screens/dashboard/pages/nft_details_page.dart';
47 import 'package:cake_wallet/src/screens/dashboard/pages/transactions_page.dart';
48 import 'package:cake_wallet/src/screens/dashboard/sign_page.dart';
49 import 'package:cake_wallet/src/screens/dev/exchange_provider_logs_page.dart';
50 import 'package:cake_wallet/src/screens/dev/monero_background_sync.dart';
51 import 'package:cake_wallet/src/screens/dev/moneroc_cache_debug.dart';
52 import 'package:cake_wallet/src/screens/dev/moneroc_call_profiler.dart';
53 import 'package:cake_wallet/src/screens/dev/network_requests.dart';
54 import 'package:cake_wallet/store/app_store.dart';
55 import 'package:cake_wallet/utils/feature_flag.dart';
56 import 'package:cake_wallet/src/screens/dev/qr_tools_page.dart';
57 import 'package:cake_wallet/src/screens/dev/secure_preferences_page.dart';
58 import 'package:cake_wallet/src/screens/dev/shared_preferences_page.dart';
59 import 'package:cake_wallet/src/screens/dev/background_sync_logs_page.dart';
60 import 'package:cake_wallet/src/screens/dev/socket_health_logs_page.dart';
61 import 'package:cake_wallet/src/screens/disclaimer/disclaimer_page.dart';
62 import 'package:cake_wallet/src/screens/disclaimer/third_party_disclaimer_page.dart';
63 import 'package:cake_wallet/src/screens/exchange/exchange_page.dart';
64 import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart';
65 import 'package:cake_wallet/src/screens/exchange_trade/exchange_confirm_page.dart';
66 import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_external_send_page.dart';
67 import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_page.dart';
68 import 'package:cake_wallet/src/screens/faq/faq_page.dart';
69 import 'package:cake_wallet/src/screens/integrations/deuro/savings_page.dart';
70 import 'package:cake_wallet/src/screens/monero_accounts/monero_account_edit_or_create_page.dart';
71 import 'package:cake_wallet/src/screens/nano/nano_change_rep_page.dart';
72 import 'package:cake_wallet/src/screens/nano_accounts/nano_account_edit_or_create_page.dart';
73 import 'package:cake_wallet/src/screens/new_wallet/wallet_group_display_page.dart';
74 import 'package:cake_wallet/src/screens/new_wallet/advanced_privacy_settings_page.dart';
75 import 'package:cake_wallet/src/screens/new_wallet/new_wallet_page.dart';
76 import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart';
77 import 'package:cake_wallet/src/screens/new_wallet/wallet_group_description_page.dart';
78 import 'package:cake_wallet/src/screens/new_wallet/wallet_group_existing_seed_description_page.dart';
79 import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart';
80 import 'package:cake_wallet/src/screens/nodes/pow_node_create_or_edit_page.dart';
81 import 'package:cake_wallet/src/screens/order_details/order_details_page.dart';
82 import 'package:cake_wallet/src/screens/payjoin_details/payjoin_details_page.dart';
83 import 'package:cake_wallet/src/screens/pin_code/pin_code_widget.dart';
84 import 'package:cake_wallet/src/screens/receive/address_list_page.dart';
85 import 'package:cake_wallet/src/screens/receive/anonpay_invoice_page.dart';
86 import 'package:cake_wallet/src/screens/receive/anonpay_receive_page.dart';
87 import 'package:cake_wallet/src/screens/receive/fullscreen_qr_page.dart';
88 import 'package:cake_wallet/src/screens/receive/receive_page.dart';
89 import 'package:cake_wallet/src/screens/rescan/rescan_page.dart';
90 import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
91 import 'package:cake_wallet/src/screens/restore/restore_options_page.dart';
92 import 'package:cake_wallet/src/screens/restore/sweeping_wallet_page.dart';
93 import 'package:cake_wallet/src/screens/restore/wallet_restore_choose_derivation.dart';
94 import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
95 import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
96 import 'package:cake_wallet/src/screens/seed/seed_verification/seed_verification_page.dart';
97 import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart';
98 import 'package:cake_wallet/src/screens/send/send_template_page.dart';
99 import 'package:cake_wallet/src/screens/send/transaction_success_info_page.dart';
100 import 'package:cake_wallet/src/screens/settings/background_sync_page.dart';
101 import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart';
102 import 'package:cake_wallet/src/screens/settings/desktop_settings/desktop_settings_page.dart';
103 import 'package:cake_wallet/src/screens/settings/display_settings_page.dart';
104 import 'package:cake_wallet/src/screens/settings/domain_lookups_page.dart';
105 import 'package:cake_wallet/src/screens/settings/manage_nodes_page.dart';
106 import 'package:cake_wallet/src/screens/settings/mweb_logs_page.dart';
107 import 'package:cake_wallet/src/screens/settings/mweb_node_page.dart';
108 import 'package:cake_wallet/src/screens/settings/mweb_settings.dart';
109 import 'package:cake_wallet/src/screens/settings/other_settings_page.dart';
110 import 'package:cake_wallet/src/screens/settings/privacy_page.dart';
111 import 'package:cake_wallet/src/screens/settings/security_backup_page.dart';
112 import 'package:cake_wallet/src/screens/settings/silent_payments_settings.dart';
113 import 'package:cake_wallet/src/screens/settings/silent_payments_logs_page.dart';
114 import 'package:cake_wallet/src/screens/settings/trocador_providers_page.dart';
115 import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart';
116 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa.dart';
117 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart';
118 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_info_page.dart';
119 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_qr_page.dart';
120 import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart';
121 import 'package:cake_wallet/src/screens/start_tor/start_tor_page.dart';
122 import 'package:cake_wallet/src/screens/subaddress/address_edit_or_create_page.dart';
123 import 'package:cake_wallet/src/screens/support/support_page.dart';
124 import 'package:cake_wallet/src/screens/support_chat/support_chat_page.dart';
125 import 'package:cake_wallet/src/screens/support_other_links/support_other_links_page.dart';
126 import 'package:cake_wallet/src/screens/trade_details/trade_details_page.dart';
127 import 'package:cake_wallet/src/screens/transaction_details/rbf_details_page.dart';
128 import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart';
129 import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
130 import 'package:cake_wallet/src/screens/ur/animated_ur_page.dart';
131 import 'package:cake_wallet/src/screens/wallet/wallet_edit_page.dart';
132 import 'package:cake_wallet/src/screens/wallet_connect/services/walletkit_service.dart';
133 import 'package:cake_wallet/src/screens/wallet_connect/wc_connections_listing_view.dart';
134 import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
135 import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart';
136 import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart';
137 import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_page.dart';
138 import 'package:cake_wallet/src/screens/welcome/create_pin_welcome_page.dart';
139 import 'package:cake_wallet/src/screens/welcome/welcome_page.dart';
140 import 'package:cake_wallet/store/settings_store.dart';
141 import 'package:cake_wallet/utils/payment_request.dart';
142 import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
143 import 'package:cake_wallet/view_model/bridge/bridge_view_model.dart';
144 import 'package:cake_wallet/view_model/bridge/bridge_history_view_model.dart';
145 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
146 import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart';
147 import 'package:cake_wallet/view_model/dashboard/sign_view_model.dart';
148 import 'package:cake_wallet/view_model/hardware_wallet/hardware_wallet_view_model.dart';
149 import 'package:cake_wallet/view_model/hardware_wallet/trezor_connect_view_model.dart';
150 import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
151 import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
152 import 'package:cake_wallet/view_model/wallet_groups_display_view_model.dart';
153 import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
154 import 'package:cake_wallet/view_model/wallet_hardware_restore_view_model.dart';
155 import 'package:cake_wallet/view_model/wallet_new_vm.dart';
156 import 'package:cake_wallet/wallet_type_utils.dart';
157 import 'package:cake_wallet/wallet_types.g.dart';
158 import 'package:cw_core/nano_account.dart';
159 import 'package:cw_core/node.dart';
160 import 'package:cw_core/transaction_info.dart';
161 import 'package:cw_core/unspent_coin_type.dart';
162 import 'package:cw_core/utils/print_verbose.dart';
163 import 'package:cw_core/wallet_info.dart';
164 import 'package:cw_core/wallet_type.dart';
165 import 'package:cake_wallet/zcash/zcash_network_type.dart';
166 import 'package:flutter/cupertino.dart';
167 import 'package:flutter/material.dart';
168 import 'package:flutter/services.dart';
169 import 'src/screens/buy/buy_sell_page.dart';
170 import 'src/screens/dashboard/pages/nft_import_page.dart';
171
172 late RouteSettings currentRouteSettings;
173
174 Route<T> handleRouteWithPlatformAwareness<T>(
175 Widget Function(BuildContext) builder, {
176 RouteSettings? settings,
177 bool fullscreenDialog = false,
178 }) {
179 if (Platform.isIOS) {
180 return CupertinoPageRoute<T>(
181 builder: builder, fullscreenDialog: fullscreenDialog, settings: settings);
182 } else {
183 return MaterialPageRoute<T>(
184 builder: builder, fullscreenDialog: fullscreenDialog, settings: settings);
185 }
186 }
187
188 Route<dynamic> createRoute(RouteSettings settings) {
189 currentRouteSettings = settings;
190
191 printV(settings.name);
192
193 switch (settings.name) {
194 case Routes.welcome:
195 return MaterialPageRoute<void>(
196 builder: (_) => CreatePinWelcomePage(
197 SettingsStoreBase.walletPasswordDirectInput,
198 ),
199 );
200
201 case Routes.welcomeWallet:
202 if (SettingsStoreBase.walletPasswordDirectInput) {
203 return createRoute(RouteSettings(name: Routes.welcomePage));
204 }
205 return handleRouteWithPlatformAwareness(
206 (_) => getIt.get<SetupPinCodePage>(
207 param1: (PinCodeState<PinCodeWidget> context, dynamic _) {
208 Navigator.of(context.context).pushNamed(Routes.welcomePage);
209 },
210 ),
211 fullscreenDialog: true,
212 );
213
214 case Routes.welcomePage:
215 return CupertinoPageRoute<void>(builder: (_) => getIt.get<WelcomePage>());
216
217 case Routes.newWalletFromWelcome:
218 if (isSingleCoin) {
219 return createRoute(
220 RouteSettings(
221 name: Routes.newWallet,
222 arguments: NewWalletArguments(type: availableWalletTypes.first)),
223 );
224 }
225 return createRoute(RouteSettings(name: Routes.newWalletType));
226
227 case Routes.newWalletType:
228 return handleRouteWithPlatformAwareness(
229 (_) => getIt.get<NewWalletTypePage>(
230 param1: NewWalletTypeArguments(
231 onTypeSelected: (BuildContext context, WalletType type) =>
232 Navigator.of(context).pushNamed(
233 Routes.newWallet,
234 arguments: NewWalletArguments(type: type),
235 ),
236 isCreate: true,
237 ),
238 ),
239 );
240
241 case Routes.walletGroupsDisplayPage:
242 final type = settings.arguments as WalletType;
243 final walletGroupsDisplayVM = getIt.get<WalletGroupsDisplayViewModel>(param1: type);
244
245 return handleRouteWithPlatformAwareness(
246 (_) => WalletGroupsDisplayPage(
247 walletGroupsDisplayVM,
248 ),
249 );
250
251 case Routes.newWallet:
252 final args = settings.arguments as NewWalletArguments;
253
254 final walletNewVM = getIt.get<WalletNewVM>(param1: args);
255 final seedSettingsViewModel = getIt.get<SeedSettingsViewModel>();
256
257 return handleRouteWithPlatformAwareness(
258 (_) => NewWalletPage(
259 walletNewVM,
260 seedSettingsViewModel,
261 isChildWallet: args.isChildWallet,
262 ),
263 );
264
265 case Routes.chooseHardwareWalletAccount:
266 final arguments = settings.arguments as List<dynamic>;
267 final type = arguments[0] as WalletType;
268 final hardwareWallet = arguments[1] as HardwareWalletType;
269
270 final walletVM = getIt.get<WalletHardwareRestoreViewModel>(
271 param1: type, param2: getIt<HardwareWalletViewModel>(param1: hardwareWallet));
272
273 if (type == WalletType.monero)
274 return handleRouteWithPlatformAwareness((_) => MoneroHardwareWalletOptionsPage(walletVM));
275
276 return handleRouteWithPlatformAwareness((_) => SelectHardwareWalletAccountPage(walletVM));
277
278 case Routes.setupPin:
279 Function(PinCodeState<PinCodeWidget>, String)? callback;
280
281 if (settings.arguments is Function(PinCodeState<PinCodeWidget>, String)) {
282 callback = settings.arguments as Function(PinCodeState<PinCodeWidget>, String);
283 }
284
285 return handleRouteWithPlatformAwareness(
286 (_) => getIt.get<SetupPinCodePage>(param1: callback),
287 );
288
289 case Routes.restoreWalletType:
290 return handleRouteWithPlatformAwareness(
291 (_) => getIt.get<NewWalletTypePage>(
292 param1: NewWalletTypeArguments(
293 onTypeSelected: (BuildContext context, WalletType type) {
294 final arg = {'walletType': type};
295 Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg);
296 },
297 isCreate: false,
298 ),
299 ),
300 );
301
302 case Routes.setupDuressPin:
303 Function(PinCodeState<PinCodeWidget>, String)? callback;
304
305 if (settings.arguments is Function(PinCodeState<PinCodeWidget>, String)) {
306 callback = settings.arguments as Function(PinCodeState<PinCodeWidget>, String);
307 }
308
309 return handleRouteWithPlatformAwareness(
310 (_) => getIt.get<SetupPinCodePage>(param1: callback, param2: true),
311 );
312
313 case Routes.restoreOptions:
314 if (SettingsStoreBase.walletPasswordDirectInput) {
315 return createRoute(RouteSettings(name: Routes.restoreWalletType));
316 }
317
318 final isNewInstall = settings.arguments as bool;
319 return handleRouteWithPlatformAwareness(
320 (context) => getIt.get<RestoreOptionsPage>(param1: isNewInstall),
321 );
322
323 case Routes.restoreWalletFromSeedKeys:
324 if (isSingleCoin) {
325 return handleRouteWithPlatformAwareness(
326 (context) => getIt.get<WalletRestorePage>(param1: availableWalletTypes.first),
327 );
328 }
329 return handleRouteWithPlatformAwareness(
330 (context) => getIt.get<NewWalletTypePage>(
331 param1: NewWalletTypeArguments(
332 onTypeSelected: (BuildContext context, WalletType type) {
333 final arg = {'walletType': type};
334 Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: arg);
335 },
336 isCreate: false,
337 ),
338 ),
339 );
340
341 case Routes.restoreWalletFromHardwareWallet:
342 final arguments = settings.arguments as Map<String, dynamic>?;
343 final showUnavailable = (arguments?['showUnavailable'] as bool?) ?? false;
344 final onSelect = arguments?['onSelect'] as void Function(BuildContext, HardwareWalletType)?;
345 final availableHardwareWalletTypes =
346 arguments?['availableHardwareWalletTypes'] as List<HardwareWalletType>?;
347
348 return handleRouteWithPlatformAwareness((_) => SelectDeviceManufacturerPage(
349 showUnavailable: showUnavailable,
350 onSelect: onSelect,
351 availableHardwareWalletTypes: availableHardwareWalletTypes,
352 ));
353
354 case Routes.connectHardwareWallet:
355 final arguments = settings.arguments as List<dynamic>;
356 final hardwareWalletType = (arguments[0] as HardwareWalletType?) ?? HardwareWalletType.ledger;
357
358 if (isSingleCoin) {
359 return handleRouteWithPlatformAwareness(
360 (_) => ConnectDevicePage(
361 ConnectDevicePageParams(
362 walletType: availableWalletTypes.first,
363 hardwareWalletType: hardwareWalletType,
364 onConnectDevice: (BuildContext context, _) => Navigator.of(context).pushNamed(
365 Routes.chooseHardwareWalletAccount,
366 arguments: [availableWalletTypes.first, hardwareWalletType]),
367 isReconnect: false,
368 ),
369 getIt.get<HardwareWalletViewModel>(param1: hardwareWalletType),
370 ),
371 );
372 }
373 return handleRouteWithPlatformAwareness(
374 (_) => getIt.get<NewWalletTypePage>(
375 param1: NewWalletTypeArguments(
376 onTypeSelected: (BuildContext context, WalletType type) {
377 if (hardwareWalletType == HardwareWalletType.trezor && type != WalletType.monero) {
378 Navigator.of(context).pushNamed(Routes.chooseHardwareWalletAccount,
379 arguments: [type, hardwareWalletType]);
380 return;
381 }
382
383 final arguments = ConnectDevicePageParams(
384 walletType: type,
385 hardwareWalletType: hardwareWalletType,
386 onConnectDevice: (BuildContext context, _) => Navigator.of(context).pushNamed(
387 Routes.chooseHardwareWalletAccount,
388 arguments: [type, hardwareWalletType]),
389 isReconnect: false,
390 );
391
392 Navigator.of(context).pushNamed(Routes.connectDevices, arguments: arguments);
393 },
394 isCreate: false,
395 hardwareWalletType: hardwareWalletType,
396 ),
397 ),
398 );
399
400 case Routes.restoreWalletTypeFromQR:
401 return CupertinoPageRoute<void>(
402 builder: (_) => getIt.get<NewWalletTypePage>(
403 param1: NewWalletTypeArguments(
404 onTypeSelected: (BuildContext context, WalletType type) =>
405 Navigator.of(context).pop(type),
406 isCreate: false,
407 ),
408 ),
409 );
410
411 case Routes.lightningUsernamePage:
412 return handleRouteWithPlatformAwareness(
413 (context) => getIt.get<LightningUsernamePage>(param1: settings.arguments as bool?));
414
415 case Routes.receiveAddresses:
416 return handleRouteWithPlatformAwareness(
417 (context) => getIt.get<NewAddressesPage>(param1: settings.arguments as bool));
418
419 case Routes.seed:
420 return handleRouteWithPlatformAwareness(
421 (context) => getIt.get<WalletSeedPage>(param1: settings.arguments as bool),
422 );
423
424 case Routes.restoreWallet:
425 final args = settings.arguments as Map<String, dynamic>?;
426 final walletType = args?['walletType'] as WalletType;
427 return MaterialPageRoute<void>(
428 builder: (_) => getIt.get<WalletRestorePage>(param1: walletType, param2: args));
429
430 case Routes.restoreWalletChooseDerivation:
431 return MaterialPageRoute<void>(
432 builder: (_) => getIt.get<WalletRestoreChooseDerivationPage>(
433 param1: settings.arguments as List<DerivationInfo>));
434
435 case Routes.sweepingWalletPage:
436 return CupertinoPageRoute<void>(builder: (_) => getIt.get<SweepingWalletPage>());
437
438 case Routes.dashboard:
439 return CupertinoPageRoute<void>(
440 settings: settings,
441 builder: (_) =>
442 FeatureFlag.hasNewUi ? getIt.get<NewDashboard>() : getIt.get<DashboardPage>());
443
444 case Routes.send:
445 final args = settings.arguments as Map<String, dynamic>?;
446 final initialPaymentRequest = args?['paymentRequest'] as PaymentRequest?;
447 final initialRawInput = args?["rawLink"] as String?;
448 final coinTypeToSpendFrom = args?['coinTypeToSpendFrom'] as UnspentCoinType?;
449
450 return handleRouteWithPlatformAwareness(
451 (context) => Material(
452 child: getIt.get<NewSendPage>(
453 param1: SendPageParams(
454 initialPaymentRequest: initialPaymentRequest,
455 initialRawInput: initialRawInput,
456 unspentCoinType: coinTypeToSpendFrom ?? UnspentCoinType.any),
457 ),
458 ),
459 settings: settings,
460 );
461
462 case Routes.sendTemplate:
463 return CupertinoPageRoute<void>(
464 fullscreenDialog: true, builder: (_) => getIt.get<SendTemplatePage>());
465
466 case Routes.receive:
467 return CupertinoPageRoute<void>(
468 builder: (context) => getIt.get<ReceivePage>(), settings: settings);
469
470 case Routes.addressPage:
471 return handleRouteWithPlatformAwareness((context) => getIt.get<AddressPage>(),
472 settings: settings);
473
474 case Routes.newReceivePage:
475 if (FeatureFlag.hasNewUi) {
476 return handleRouteWithPlatformAwareness(
477 (context) => Material(child: getIt.get<NewReceivePage>(param1: false, param2: null)),
478 settings: settings,
479 );
480 }
481 return handleRouteWithPlatformAwareness((context) => getIt.get<AddressPage>(),
482 settings: settings);
483
484 case Routes.transactionDetails:
485 return CupertinoPageRoute<void>(
486 fullscreenDialog: true,
487 builder: (_) =>
488 getIt.get<TransactionDetailsPage>(param1: settings.arguments as TransactionInfo));
489
490 case Routes.bumpFeePage:
491 return CupertinoPageRoute<void>(
492 fullscreenDialog: true,
493 builder: (_) => getIt.get<RBFDetailsPage>(param1: settings.arguments as List<dynamic>));
494
495 case Routes.newSubaddress:
496 return CupertinoPageRoute<void>(
497 builder: (_) => getIt.get<AddressEditOrCreatePage>(param1: settings.arguments));
498
499 case Routes.disclaimer:
500 return CupertinoPageRoute<void>(builder: (_) => DisclaimerPage());
501
502 case Routes.readDisclaimer:
503 return CupertinoPageRoute<void>(builder: (_) => DisclaimerPage(isReadOnly: true));
504
505 case Routes.readThirdPartyDisclaimer:
506 return CupertinoPageRoute<void>(builder: (_) => ThirdPartyDisclaimerPage());
507
508 case Routes.changeRep:
509 return CupertinoPageRoute<void>(builder: (_) => getIt.get<NanoChangeRepPage>());
510
511 case Routes.walletList:
512 final onWalletLoaded = settings.arguments as Function(BuildContext)?;
513 return MaterialPageRoute<void>(
514 fullscreenDialog: true,
515 builder: (_) => getIt.get<WalletListPage>(param1: onWalletLoaded),
516 );
517
518 case Routes.walletEdit:
519 return MaterialPageRoute<void>(
520 fullscreenDialog: true,
521 builder: (_) =>
522 getIt.get<WalletEditPage>(param1: settings.arguments as WalletEditPageArguments),
523 );
524
525 case Routes.auth:
526 return MaterialPageRoute<void>(
527 fullscreenDialog: true,
528 builder: (_) => SettingsStoreBase.walletPasswordDirectInput
529 ? getIt.get<WalletUnlockPage>(
530 param1: WalletUnlockArguments(
531 callback: settings.arguments as OnAuthenticationFinished),
532 instanceName: 'wallet_unlock_verifiable',
533 param2: true)
534 : getIt.get<AuthPage>(
535 param1: settings.arguments as OnAuthenticationFinished, param2: true));
536
537 case Routes.totpAuthCodePage:
538 final args = settings.arguments as TotpAuthArgumentsModel;
539 return MaterialPageRoute<void>(
540 fullscreenDialog: true,
541 builder: (_) => getIt.get<TotpAuthCodePage>(
542 param1: args,
543 ),
544 );
545
546 case Routes.walletUnlockLoadable:
547 return MaterialPageRoute<void>(
548 fullscreenDialog: true,
549 builder: (_) => getIt.get<WalletUnlockPage>(
550 param1: settings.arguments as WalletUnlockArguments,
551 instanceName: 'wallet_unlock_loadable',
552 param2: true));
553
554 case Routes.unlock:
555 return MaterialPageRoute<void>(
556 fullscreenDialog: true,
557 builder: (_) => SettingsStoreBase.walletPasswordDirectInput
558 ? WillPopScope(
559 child: getIt.get<WalletUnlockPage>(
560 param1: WalletUnlockArguments(
561 callback: settings.arguments as OnAuthenticationFinished),
562 param2: false,
563 instanceName: 'wallet_unlock_verifiable'),
564 onWillPop: () async => false)
565 : WillPopScope(
566 child: getIt.get<AuthPage>(
567 param1: settings.arguments as OnAuthenticationFinished, param2: false),
568 onWillPop: () async => false));
569
570 case Routes.silentPaymentsSettings:
571 return handleRouteWithPlatformAwareness(
572 (context) => getIt.get<SilentPaymentsSettingsPage>(),
573 );
574
575 case Routes.silentPaymentsLogs:
576 return handleRouteWithPlatformAwareness(
577 (context) => getIt.get<SilentPaymentsLogPage>(),
578 );
579
580 case Routes.mwebSettings:
581 return handleRouteWithPlatformAwareness(
582 (context) => getIt.get<MwebSettingsPage>(),
583 );
584
585 case Routes.mwebLogs:
586 return handleRouteWithPlatformAwareness(
587 (context) => getIt.get<MwebLogsPage>(),
588 );
589
590 case Routes.mwebNode:
591 return handleRouteWithPlatformAwareness(
592 (context) => getIt.get<MwebNodePage>(),
593 );
594
595 case Routes.connectionSync:
596 return handleRouteWithPlatformAwareness(
597 (context) => getIt.get<ConnectionSyncPage>(),
598 );
599
600 case Routes.securityBackupPage:
601 return handleRouteWithPlatformAwareness(
602 (context) => getIt.get<SecurityBackupPage>(),
603 );
604
605 case Routes.securityBackupDuressPin:
606 return handleRouteWithPlatformAwareness(
607 (context) => getIt.get<SecurityBackupPage>(),
608 );
609
610 case Routes.privacyPage:
611 return handleRouteWithPlatformAwareness(
612 (context) => getIt.get<PrivacyPage>(),
613 );
614
615 case Routes.trocadorProvidersPage:
616 return CupertinoPageRoute<void>(
617 fullscreenDialog: true, builder: (_) => getIt.get<TrocadorProvidersPage>());
618
619 case Routes.domainLookupsPage:
620 return CupertinoPageRoute<void>(
621 fullscreenDialog: true, builder: (_) => getIt.get<DomainLookupsPage>());
622
623 case Routes.displaySettingsPage:
624 return handleRouteWithPlatformAwareness(
625 (context) => getIt.get<DisplaySettingsPage>(),
626 );
627
628 case Routes.otherSettingsPage:
629 return handleRouteWithPlatformAwareness(
630 (context) => getIt.get<OtherSettingsPage>(),
631 );
632
633 case Routes.newNode:
634 final args = settings.arguments as Map<String, dynamic>?;
635 final page = getIt.get<NodeCreateOrEditPage>(
636 param1: args?['editingNode'] as Node?, param2: args?['isSelected'] as bool?);
637 return CupertinoPageRoute<void>(builder: (_) => page);
638
639 case Routes.login:
640 return CupertinoPageRoute<void>(
641 builder: (context) => WillPopScope(
642 child: SettingsStoreBase.walletPasswordDirectInput
643 ? getIt.get<WalletUnlockPage>(instanceName: 'wallet_password_login')
644 : getIt.get<AuthPage>(instanceName: 'login'),
645 onWillPop: () async =>
646 // FIX-ME: Additional check does it works correctly
647 (await SystemChannels.platform.invokeMethod<bool>('SystemNavigator.pop') ??
648 false)),
649 fullscreenDialog: true);
650
651 case Routes.newPowNode:
652 final args = settings.arguments as Map<String, dynamic>?;
653 final page = getIt.get<PowNodeCreateOrEditPage>(
654 param1: args?['editingNode'] as Node?, param2: args?['isSelected'] as bool?);
655 return CupertinoPageRoute<void>(builder: (_) => page);
656
657 case Routes.accountCreation:
658 return CupertinoPageRoute<String>(
659 builder: (_) => getIt.get<MoneroAccountEditOrCreatePage>(
660 param1: settings.arguments as AccountListItem?));
661
662 case Routes.nanoAccountCreation:
663 return CupertinoPageRoute<String>(
664 builder: (_) =>
665 getIt.get<NanoAccountEditOrCreatePage>(param1: settings.arguments as NanoAccount?));
666
667 case Routes.addressBook:
668 return handleRouteWithPlatformAwareness(
669 (context) => getIt.get<ContactListPage>(),
670 );
671
672 case Routes.pickerAddressBook:
673 final args = settings.arguments as List<dynamic>;
674 return MaterialPageRoute<void>(
675 builder: (_) => getIt.get<ContactListPage>(param1: args[0], param2: args[1]));
676
677 case Routes.pickerWalletAddress:
678 return MaterialPageRoute<void>(builder: (_) => getIt.get<AddressListPage>());
679
680 case Routes.addressBookAddContact:
681 return handleRouteWithPlatformAwareness(
682 (context) => getIt.get<ContactPage>(param1: settings.arguments as ContactRecord?),
683 );
684
685 case Routes.showKeys:
686 return handleRouteWithPlatformAwareness(
687 (context) => getIt.get<WalletKeysPage>(),
688 );
689
690 case Routes.exchangeTrade:
691 return CupertinoPageRoute<void>(builder: (_) => getIt.get<ExchangeTradePage>());
692
693 case Routes.exchangeConfirm:
694 return MaterialPageRoute<void>(builder: (_) => getIt.get<ExchangeConfirmPage>());
695
696 case Routes.tradeDetails:
697 return CupertinoPageRoute<void>(
698 fullscreenDialog: true,
699 builder: (_) => getIt.get<TradeDetailsPage>(param1: settings.arguments as Trade));
700
701 case Routes.orderDetails:
702 return MaterialPageRoute<void>(
703 builder: (_) => getIt.get<OrderDetailsPage>(param1: settings.arguments as Order));
704
705 case Routes.buySellPage:
706 final args = settings.arguments as bool?;
707 return handleRouteWithPlatformAwareness(
708 (context) => getIt.get<BuySellPage>(param1: args),
709 );
710
711 case Routes.buyOptionsPage:
712 final args = settings.arguments as List;
713 return MaterialPageRoute<void>(builder: (_) => getIt.get<BuyOptionsPage>(param1: args));
714
715 case Routes.paymentMethodOptionsPage:
716 final args = settings.arguments as List;
717 return MaterialPageRoute<void>(
718 builder: (_) => getIt.get<PaymentMethodOptionsPage>(param1: args));
719
720 case Routes.buyWebView:
721 final args = settings.arguments as List;
722
723 return MaterialPageRoute<void>(
724 fullscreenDialog: true, builder: (_) => getIt.get<BuyWebViewPage>(param1: args));
725
726 case Routes.exchange:
727 return handleRouteWithPlatformAwareness(
728 (context) => getIt.get<ExchangePage>(param1: settings.arguments as PaymentRequest?),
729 );
730
731 case Routes.exchangeTemplate:
732 return CupertinoPageRoute<void>(builder: (_) => getIt.get<ExchangeTemplatePage>());
733
734 case Routes.rescan:
735 final page = getIt.get<RescanPage>();
736 return MaterialPageRoute<void>(builder: (_) => page);
737
738 case Routes.faq:
739 return MaterialPageRoute<void>(builder: (_) => getIt.get<FaqPage>());
740
741 case Routes.preSeedPage:
742 return MaterialPageRoute<void>(builder: (_) => getIt.get<PreSeedPage>());
743
744 case Routes.walletGroupExistingSeedDescriptionPage:
745 return MaterialPageRoute<void>(builder: (_) => WalletGroupExistingSeedDescriptionPage());
746
747 case Routes.transactionSuccessPage:
748 return MaterialPageRoute<void>(
749 builder: (_) => getIt.get<TransactionSuccessPage>(param1: settings.arguments as String));
750
751 case Routes.backup:
752 return handleRouteWithPlatformAwareness(
753 (context) => getIt.get<BackupPage>(),
754 );
755
756 case Routes.editBackupPassword:
757 return CupertinoPageRoute<void>(builder: (_) => getIt.get<EditBackupPasswordPage>());
758
759 case Routes.restoreFromBackup:
760 return CupertinoPageRoute<void>(
761 fullscreenDialog: true, builder: (_) => getIt.get<RestoreFromBackupPage>());
762
763 case Routes.support:
764 return handleRouteWithPlatformAwareness(
765 (context) => getIt.get<SupportPage>(),
766 );
767
768 case Routes.supportLiveChat:
769 return CupertinoPageRoute<void>(builder: (_) => getIt.get<SupportChatPage>());
770
771 case Routes.supportOtherLinks:
772 return handleRouteWithPlatformAwareness(
773 (context) => getIt.get<SupportOtherLinksPage>(),
774 );
775
776 case Routes.unspentCoinsList:
777 final args = settings.arguments as CoinControlPageArgs?;
778 return handleRouteWithPlatformAwareness((context) =>
779 getIt.get<NewCoinControlPage>(param1: args?.coinTypeToSpendFrom, param2: args?.canEdit));
780
781 case Routes.unspentCoinsDetails:
782 final args = settings.arguments as List;
783
784 return MaterialPageRoute<void>(
785 builder: (_) => getIt.get<UnspentCoinsDetailsPage>(param1: args));
786
787 case Routes.fullscreenQR:
788 return MaterialPageRoute<void>(
789 builder: (_) => getIt.get<FullscreenQRPage>(
790 param1: settings.arguments as QrViewData,
791 ));
792
793 case Routes.cakePayCardsPage:
794 return handleRouteWithPlatformAwareness(
795 (context) => getIt.get<CakePayCardsPage>(),
796 );
797
798 case Routes.aboutPage:
799 final page = getIt.get<AboutPage>();
800 return handleRouteWithPlatformAwareness((context) => page);
801
802 case Routes.cakePayBuyCardPage:
803 final args = settings.arguments as List;
804 return handleRouteWithPlatformAwareness(
805 (context) => getIt.get<CakePayBuyCardPage>(param1: args),
806 );
807
808 case Routes.cakePayWelcomePage:
809 return handleRouteWithPlatformAwareness<bool>(
810 (context) => getIt.get<CakePayWelcomePage>(),
811 );
812
813 case Routes.cakePayVerifyOtpPage:
814 final args = settings.arguments as List;
815 return handleRouteWithPlatformAwareness<bool>(
816 (context) => getIt.get<CakePayVerifyOtpPage>(param1: args),
817 );
818
819 case Routes.cakePayAccountPage:
820 return handleRouteWithPlatformAwareness<bool>(
821 (context) => getIt.get<CakePayAccountPage>(),
822 );
823
824 case Routes.webViewPage:
825 final args = settings.arguments as List;
826 final title = args.first as String;
827 final url = args[1] as Uri;
828 return CupertinoPageRoute<void>(
829 builder: (_) => getIt.get<WebViewPage>(param1: title, param2: url));
830
831 case Routes.advancedPrivacySettings:
832 final args = settings.arguments as Map<String, dynamic>;
833 final type = args['type'] as WalletType;
834 final isFromRestore = args['isFromRestore'] as bool? ?? false;
835 final isChildWallet = args['isChildWallet'] as bool? ?? false;
836 final useTestnet = args['useTestnet'] as bool;
837 final toggleTestnet = args['toggleTestnet'] as Function(bool? val);
838 final zcashNetwork = args['zcashNetwork'] as int? ?? ZcashNetworkType.mainnet;
839 final setZcashNetwork = args['setZcashNetwork'] as void Function(int network)? ?? (_) {};
840
841 final viewModelParam = {'type': type, 'isPow': false};
842
843 return handleRouteWithPlatformAwareness(
844 (context) => AdvancedPrivacySettingsPage(
845 isFromRestore: isFromRestore,
846 isChildWallet: isChildWallet,
847 useTestnet: useTestnet,
848 toggleUseTestnet: toggleTestnet,
849 zcashNetwork: zcashNetwork,
850 setZcashNetwork: setZcashNetwork,
851 advancedPrivacySettingsViewModel:
852 getIt.get<AdvancedPrivacySettingsViewModel>(param1: type),
853 nodeViewModel: getIt.get<NodeCreateOrEditViewModel>(param1: viewModelParam),
854 seedSettingsViewModel: getIt.get<SeedSettingsViewModel>(),
855 ),
856 );
857
858 case Routes.anonPayInvoicePage:
859 final args = settings.arguments as List;
860 return CupertinoPageRoute<void>(builder: (_) => getIt.get<AnonPayInvoicePage>(param1: args));
861
862 case Routes.anonPayReceivePage:
863 final anonReceivePageArgs = settings.arguments as AnonPayReceivePageArgs;
864 return CupertinoPageRoute<void>(
865 builder: (_) => getIt.get<AnonPayReceivePage>(param1: anonReceivePageArgs));
866
867 case Routes.anonPayDetailsPage:
868 final anonInvoiceViewData = settings.arguments as AnonpayInvoiceInfo;
869 return CupertinoPageRoute<void>(
870 builder: (_) => getIt.get<AnonpayDetailsPage>(param1: anonInvoiceViewData));
871
872 case Routes.payjoinDetails:
873 final arguments = settings.arguments as List;
874 final sessionId = arguments.first as String;
875 final transactionInfo = arguments[1] as TransactionInfo?;
876 return CupertinoPageRoute<void>(
877 builder: (_) =>
878 getIt.get<PayjoinDetailsPage>(param1: sessionId, param2: transactionInfo));
879
880 case Routes.desktop_actions:
881 return PageRouteBuilder(
882 opaque: false,
883 pageBuilder: (_, __, ___) => DesktopDashboardActions(getIt<DashboardViewModel>()),
884 );
885
886 case Routes.desktop_settings_page:
887 return CupertinoPageRoute<void>(builder: (_) => getIt.get<DesktopSettingsPage>());
888
889 case Routes.empty_no_route:
890 return MaterialPageRoute<void>(builder: (_) => SizedBox.shrink());
891
892 case Routes.transactionsPage:
893 return CupertinoPageRoute<void>(
894 settings: settings,
895 fullscreenDialog: true,
896 builder: (_) => getIt.get<TransactionsPage>());
897
898 case Routes.setup_2faPage:
899 return MaterialPageRoute<void>(builder: (_) => getIt.get<Setup2FAPage>());
900
901 case Routes.setup_2faQRPage:
902 return MaterialPageRoute<void>(builder: (_) => getIt.get<Setup2FAQRPage>());
903
904 case Routes.modify2FAPage:
905 return MaterialPageRoute<void>(builder: (_) => getIt.get<Modify2FAPage>());
906
907 case Routes.setup2faInfoPage:
908 return MaterialPageRoute<void>(builder: (_) => getIt.get<Setup2FAInfoPage>());
909
910 case Routes.syncKeyImagesDevices:
911 final hardwareWalletType = getIt<AppStore>().wallet!.hardwareWalletType;
912 if (hardwareWalletType == HardwareWalletType.trezor) {
913 return MaterialPageRoute<void>(
914 builder: (_) => SyncKeyImagesSheet(
915 appStore: getIt<AppStore>(),
916 trezorConnectVM: getIt<TrezorConnectViewModel>(),
917 ),
918 );
919 }
920 return MaterialPageRoute<void>(
921 builder: (_) => getIt.get<AnimatedURPage>(param1: settings.arguments));
922
923 case Routes.urqrAnimatedPage:
924 return MaterialPageRoute<void>(
925 builder: (_) => getIt.get<AnimatedURPage>(param1: settings.arguments));
926
927 case Routes.homeSettings:
928 return CupertinoPageRoute<void>(
929 builder: (_) => getIt.get<HomeSettingsPage>(param1: settings.arguments),
930 );
931
932 case Routes.editToken:
933 final args = settings.arguments as Map<String, dynamic>;
934
935 return CupertinoPageRoute<void>(
936 settings: RouteSettings(name: Routes.editToken),
937 builder: (_) => getIt.get<EditTokenPage>(
938 param1: args['homeSettingsViewModel'],
939 param2: {
940 'token': args['token'],
941 'contractAddress': args['contractAddress'],
942 },
943 ),
944 );
945
946 case Routes.manageNodes:
947 return MaterialPageRoute<void>(builder: (_) => getIt.get<ManageNodesPage>(param1: false));
948
949 case Routes.managePowNodes:
950 return MaterialPageRoute<void>(builder: (_) => getIt.get<ManageNodesPage>(param1: true));
951
952 case Routes.walletConnectConnectionsListing:
953 return MaterialPageRoute<void>(
954 builder: (_) => WalletConnectConnectionsView(
955 walletKitService: getIt.get<WalletKitService>(),
956 launchUri: settings.arguments as Uri?,
957 ));
958
959 case Routes.nftDetailsPage:
960 return MaterialPageRoute<void>(
961 builder: (_) => NFTDetailsPage(
962 arguments: settings.arguments as NFTDetailsPageArguments,
963 dashboardViewModel: getIt.get<DashboardViewModel>(),
964 ),
965 );
966
967 case Routes.importNFTPage:
968 return MaterialPageRoute<void>(
969 builder: (_) => ImportNFTPage(
970 nftViewModel: settings.arguments as NFTViewModel,
971 ),
972 );
973
974 case Routes.signPage:
975 final vm = getIt.get<SignViewModel>();
976 return MaterialPageRoute<void>(
977 builder: (_) => SignPage(vm),
978 );
979
980 case Routes.connectDevices:
981 final params = settings.arguments as ConnectDevicePageParams;
982
983 return MaterialPageRoute<void>(
984 builder: (_) => ConnectDevicePage(
985 params, getIt.get<HardwareWalletViewModel>(param1: params.hardwareWalletType)));
986
987 case Routes.walletGroupDescription:
988 final walletType = settings.arguments as WalletType;
989
990 return MaterialPageRoute<void>(
991 builder: (_) => WalletGroupDescriptionPage(
992 selectedWalletType: walletType,
993 ),
994 );
995
996 case Routes.walletSeedVerificationPage:
997 return MaterialPageRoute<void>(
998 fullscreenDialog: true,
999 builder: (_) => getIt.get<SeedVerificationPage>(),
1000 );
1001
1002 case Routes.exchangeTradeExternalSendPage:
1003 return MaterialPageRoute<void>(
1004 builder: (_) => getIt.get<ExchangeTradeExternalSendPage>(),
1005 );
1006
1007 case Routes.backgroundSync:
1008 return handleRouteWithPlatformAwareness(
1009 (context) => getIt.get<BackgroundSyncPage>(),
1010 );
1011
1012 case Routes.devMoneroBackgroundSync:
1013 return MaterialPageRoute<void>(
1014 builder: (_) => getIt.get<DevMoneroBackgroundSyncPage>(),
1015 );
1016 case Routes.devSharedPreferences:
1017 return MaterialPageRoute<void>(
1018 builder: (_) => getIt.get<DevSharedPreferencesPage>(),
1019 );
1020
1021 case Routes.devBackgroundSyncLogs:
1022 return MaterialPageRoute<void>(
1023 builder: (_) => getIt.get<DevBackgroundSyncLogsPage>(),
1024 );
1025
1026 case Routes.devSocketHealthLogs:
1027 return CupertinoPageRoute<void>(
1028 builder: (_) => getIt.get<DevSocketHealthLogsPage>(),
1029 );
1030
1031 case Routes.devQRTools:
1032 return MaterialPageRoute<void>(
1033 builder: (_) => getIt.get<DevQRToolsPage>(),
1034 );
1035
1036 case Routes.devNetworkRequests:
1037 return MaterialPageRoute<void>(
1038 builder: (_) => getIt.get<DevNetworkRequests>(),
1039 );
1040
1041 case Routes.devExchangeProviderLogs:
1042 return MaterialPageRoute<void>(
1043 builder: (_) => getIt.get<DevExchangeProviderLogsPage>(),
1044 );
1045
1046 case Routes.devMoneroCallProfiler:
1047 return MaterialPageRoute<void>(
1048 builder: (_) => getIt.get<DevMoneroCallProfilerPage>(),
1049 );
1050
1051 case Routes.devMoneroWalletCacheDebug:
1052 return MaterialPageRoute<void>(
1053 builder: (_) => getIt.get<DevMoneroWalletCacheDebugPage>(),
1054 );
1055
1056 case Routes.devSecurePreferences:
1057 return MaterialPageRoute<void>(
1058 builder: (_) => getIt.get<DevSecurePreferencesPage>(),
1059 );
1060
1061 case Routes.startTor:
1062 return MaterialPageRoute<void>(
1063 builder: (_) => getIt.get<StartTorPage>(),
1064 );
1065
1066 case Routes.dEuroSavings:
1067 return MaterialPageRoute<void>(
1068 builder: (_) => getIt.get<DEuroSavingsPage>(),
1069 );
1070
1071 case Routes.bridgeHistoryPage:
1072 return handleRouteWithPlatformAwareness(
1073 (context) => BridgeHistoryPage(settings.arguments as BridgeHistoryViewModel),
1074 );
1075
1076 case Routes.bridgeDestinationNetworkPage:
1077 return handleRouteWithPlatformAwareness(
1078 (context) => BridgeNetworkPage(settings.arguments as BridgeViewModel),
1079 );
1080
1081 case Routes.bridgeReceivingWalletPage:
1082 return handleRouteWithPlatformAwareness(
1083 (context) => BridgeReceivingWalletPage(settings.arguments as BridgeViewModel),
1084 );
1085
1086 default:
1087 return MaterialPageRoute<void>(
1088 builder: (_) => Scaffold(
1089 body: Center(child: Text(S.current.router_no_route(settings.name ?? 'No route')))));
1090 }
1091 }