import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/entities/transaction_description.dart'; import 'package:cake_wallet/src/screens/pin_code/pin_code_widget.dart'; import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart'; import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/utils/language_list.dart'; import 'package:cake_wallet/view_model/wallet_new_vm.dart'; import 'package:cake_wallet/view_model/wallet_restoration_from_seed_vm.dart'; import 'package:cake_wallet/view_model/wallet_restoration_from_keys_vm.dart'; import 'package:cake_wallet/entities/contact.dart'; import 'package:cake_wallet/exchange/trade.dart'; import 'package:cake_wallet/entities/transaction_info.dart'; import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart'; import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart'; import 'package:cake_wallet/src/screens/auth/auth_page.dart'; import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart'; import 'package:cake_wallet/src/screens/nodes/nodes_list_page.dart'; import 'package:cake_wallet/src/screens/receive/receive_page.dart'; import 'package:cake_wallet/src/screens/subaddress/address_edit_or_create_page.dart'; import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart'; import 'package:cake_wallet/src/screens/new_wallet/new_wallet_page.dart'; import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart'; import 'package:cake_wallet/src/screens/restore/restore_options_page.dart'; import 'package:cake_wallet/src/screens/restore/restore_wallet_options_page.dart'; import 'package:cake_wallet/src/screens/restore/restore_wallet_from_seed_page.dart'; import 'package:cake_wallet/src/screens/restore/restore_wallet_from_keys_page.dart'; import 'package:cake_wallet/src/screens/send/send_page.dart'; import 'package:cake_wallet/src/screens/disclaimer/disclaimer_page.dart'; import 'package:cake_wallet/src/screens/seed_language/seed_language_page.dart'; import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart'; import 'package:cake_wallet/src/screens/monero_accounts/monero_account_edit_or_create_page.dart'; import 'package:cake_wallet/src/screens/contact/contact_list_page.dart'; import 'package:cake_wallet/src/screens/contact/contact_page.dart'; import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart'; import 'package:cake_wallet/src/screens/settings/change_language.dart'; import 'package:cake_wallet/src/screens/restore/restore_wallet_from_seed_details.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_page.dart'; import 'package:cake_wallet/src/screens/settings/settings.dart'; import 'package:cake_wallet/src/screens/rescan/rescan_page.dart'; import 'package:cake_wallet/src/screens/faq/faq_page.dart'; import 'package:cake_wallet/src/screens/trade_details/trade_details_page.dart'; import 'package:cake_wallet/src/screens/welcome/create_welcome_page.dart'; import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart'; import 'package:cake_wallet/src/screens/send/send_template_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart'; import 'package:cake_wallet/src/screens/exchange_trade/exchange_confirm_page.dart'; import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_page.dart'; import 'package:hive/hive.dart'; Route createRoute(RouteSettings settings) { switch (settings.name) { case Routes.welcome: return MaterialPageRoute(builder: (_) => createWelcomePage()); case Routes.newWalletFromWelcome: return CupertinoPageRoute( builder: (_) => getIt.get( param1: (PinCodeState context, dynamic _) => Navigator.of(context.context) .pushNamed(Routes.newWalletType)), fullscreenDialog: true); case Routes.newWalletType: return CupertinoPageRoute( builder: (_) => getIt.get( param1: (BuildContext context, WalletType _) => Navigator.of(context).pushNamed(Routes.preSeed, arguments: true), param2: true)); case Routes.newWallet: final type = settings.arguments as WalletType; final walletNewVM = getIt.get(param1: type); return CupertinoPageRoute( builder: (_) => NewWalletPage(walletNewVM)); case Routes.setupPin: Function(PinCodeState, String) callback; if (settings.arguments is Function(PinCodeState, String)) { callback = settings.arguments as Function(PinCodeState, String); } return CupertinoPageRoute( builder: (_) => getIt.get(param1: callback)); case Routes.restoreWalletType: return CupertinoPageRoute( builder: (_) => getIt.get( param1: (BuildContext context, WalletType type) => Navigator.of(context) .pushNamed(Routes.restoreWallet, arguments: type), param2: false)); case Routes.restoreOptions: final type = settings.arguments as WalletType; return CupertinoPageRoute( builder: (_) => RestoreOptionsPage(type: type)); case Routes.restoreWalletOptions: final type = WalletType.monero; //settings.arguments as WalletType; return CupertinoPageRoute( builder: (_) => RestoreWalletOptionsPage( type: type, onRestoreFromSeed: (context) { final route = type == WalletType.monero ? Routes.seedLanguage : Routes.restoreWalletFromSeed; final args = type == WalletType.monero ? [type, Routes.restoreWalletFromSeed] : [type]; Navigator.of(context).pushNamed(route, arguments: args); }, onRestoreFromKeys: (context) { final route = type == WalletType.monero ? Routes.seedLanguage : Routes.restoreWalletFromKeys; final args = type == WalletType.monero ? [type, Routes.restoreWalletFromKeys] : [type]; Navigator.of(context).pushNamed(route, arguments: args); })); case Routes.restoreWalletOptionsFromWelcome: return CupertinoPageRoute( builder: (_) => getIt.get( param1: (PinCodeState context, dynamic _) => Navigator.pushNamed(context.context, Routes.restoreWalletType)), fullscreenDialog: true); case Routes.seed: return MaterialPageRoute( builder: (_) => getIt.get(param1: settings.arguments as bool)); case Routes.restoreWallet: return MaterialPageRoute( builder: (_) => getIt.get(param1: settings.arguments as WalletType)); case Routes.restoreWalletFromSeed: final type = settings.arguments as WalletType; return CupertinoPageRoute( builder: (_) => RestoreWalletFromSeedPage(type: type)); case Routes.restoreWalletFromKeys: final args = settings.arguments as List; final type = args.first as WalletType; final language = type == WalletType.monero ? args[1] as String : LanguageList.english; final walletRestorationFromKeysVM = getIt.get(param1: [type, language]); return CupertinoPageRoute( builder: (_) => RestoreWalletFromKeysPage( walletRestorationFromKeysVM: walletRestorationFromKeysVM)); case Routes.dashboard: return CupertinoPageRoute( builder: (_) => getIt.get()); case Routes.send: return CupertinoPageRoute( fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.sendTemplate: return CupertinoPageRoute( fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.receive: return CupertinoPageRoute( fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.transactionDetails: return CupertinoPageRoute( fullscreenDialog: true, builder: (_) => getIt.get( param1: settings.arguments as TransactionInfo)); case Routes.newSubaddress: return CupertinoPageRoute( builder: (_) => getIt.get(param1: settings.arguments)); case Routes.disclaimer: return CupertinoPageRoute(builder: (_) => DisclaimerPage()); case Routes.readDisclaimer: return CupertinoPageRoute( builder: (_) => DisclaimerPage(isReadOnly: true)); case Routes.seedLanguage: final args = settings.arguments as List; final type = args.first as WalletType; final redirectRoute = args[1] as String; return CupertinoPageRoute(builder: (_) { return SeedLanguage( onConfirm: (context, lang) => Navigator.of(context) .popAndPushNamed(redirectRoute, arguments: [type, lang])); }); case Routes.walletList: return MaterialPageRoute( fullscreenDialog: true, builder: (_) => getIt.get()); case Routes.auth: return MaterialPageRoute( fullscreenDialog: true, builder: (_) => getIt.get( param1: settings.arguments as OnAuthenticationFinished, param2: true)); case Routes.unlock: return MaterialPageRoute( fullscreenDialog: true, builder: (_) => getIt.get( param1: settings.arguments as OnAuthenticationFinished, param2: false)); case Routes.nodeList: return CupertinoPageRoute( builder: (_) => getIt.get()); case Routes.newNode: return CupertinoPageRoute( builder: (_) => getIt.get()); case Routes.login: return CupertinoPageRoute( builder: (context) => getIt.get(instanceName: 'login'), fullscreenDialog: true); case Routes.accountCreation: return CupertinoPageRoute( builder: (_) => getIt.get( param1: settings.arguments as AccountListItem)); case Routes.addressBook: return MaterialPageRoute( builder: (_) => getIt.get(param1: true)); case Routes.pickerAddressBook: return MaterialPageRoute( builder: (_) => getIt.get(param1: false)); case Routes.addressBookAddContact: return CupertinoPageRoute( builder: (_) => getIt.get( param1: settings.arguments as ContactRecord)); case Routes.showKeys: return MaterialPageRoute( builder: (_) => getIt.get(), fullscreenDialog: true); case Routes.exchangeTrade: return CupertinoPageRoute( builder: (_) => getIt.get()); case Routes.exchangeConfirm: return MaterialPageRoute( builder: (_) => getIt.get()); case Routes.tradeDetails: return MaterialPageRoute( builder: (_) => TradeDetailsPage(settings.arguments as Trade)); case Routes.restoreWalletFromSeedDetails: final args = settings.arguments as List; final walletRestorationFromSeedVM = getIt.get(param1: args); return CupertinoPageRoute( builder: (_) => RestoreWalletFromSeedDetailsPage( walletRestorationFromSeedVM: walletRestorationFromSeedVM)); case Routes.exchange: return CupertinoPageRoute( builder: (_) => getIt.get()); case Routes.exchangeTemplate: return CupertinoPageRoute( builder: (_) => getIt.get()); case Routes.settings: return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.rescan: return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.faq: return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.changeLanguage: return MaterialPageRoute( builder: (_) => getIt.get()); case Routes.preSeed: return MaterialPageRoute( builder: (_) => getIt.get()); default: return MaterialPageRoute( builder: (_) => Scaffold( body: Center( child: Text(S.current.router_no_route(settings.name))))); } }