import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../features/auth/presentation/pages/splash_page.dart'; import '../features/auth/presentation/pages/guide_page.dart'; import '../features/auth/presentation/pages/onboarding_page.dart'; import '../features/auth/presentation/pages/backup_mnemonic_page.dart'; import '../features/auth/presentation/pages/verify_mnemonic_page.dart'; import '../features/auth/presentation/pages/wallet_created_page.dart'; import '../features/auth/presentation/pages/import_mnemonic_page.dart'; import '../features/auth/presentation/pages/phone_register_page.dart'; import '../features/auth/presentation/pages/phone_login_page.dart'; import '../features/auth/presentation/pages/forgot_password_page.dart'; import '../features/auth/presentation/pages/sms_verify_page.dart'; import '../features/auth/presentation/pages/set_password_page.dart'; import '../features/home/presentation/pages/home_shell_page.dart'; import '../features/ranking/presentation/pages/ranking_page.dart'; import '../features/mining/presentation/pages/mining_page.dart'; import '../features/trading/presentation/pages/trading_page.dart'; import '../features/trading/presentation/pages/ledger_detail_page.dart'; import '../features/profile/presentation/pages/profile_page.dart'; import '../features/profile/presentation/pages/edit_profile_page.dart'; import '../features/share/presentation/pages/share_page.dart'; import '../features/deposit/presentation/pages/deposit_usdt_page.dart'; import '../features/planting/presentation/pages/planting_quantity_page.dart'; import '../features/planting/presentation/pages/planting_location_page.dart'; import '../features/security/presentation/pages/google_auth_page.dart'; import '../features/security/presentation/pages/change_password_page.dart'; import '../features/security/presentation/pages/bind_email_page.dart'; import '../features/authorization/presentation/pages/authorization_apply_page.dart'; import '../features/withdraw/presentation/pages/withdraw_usdt_page.dart'; import '../features/withdraw/presentation/pages/withdraw_confirm_page.dart'; import '../features/withdraw/presentation/pages/withdraw_fiat_page.dart'; import '../features/withdraw/presentation/pages/withdraw_fiat_confirm_page.dart'; import '../features/notification/presentation/pages/notification_inbox_page.dart'; import '../features/account/presentation/pages/account_switch_page.dart'; import '../features/kyc/presentation/pages/kyc_entry_page.dart'; import '../features/kyc/presentation/pages/kyc_phone_page.dart'; import '../features/kyc/presentation/pages/kyc_id_page.dart'; import '../features/kyc/presentation/pages/kyc_face_page.dart'; import '../features/kyc/presentation/pages/kyc_id_card_page.dart'; import '../features/kyc/presentation/pages/change_phone_page.dart'; import '../features/contract_signing/presentation/pages/contract_signing_page.dart'; import '../features/contract_signing/presentation/pages/pending_contracts_page.dart'; import '../features/pending_actions/presentation/pages/pending_actions_page.dart'; import 'route_paths.dart'; import 'route_names.dart'; /// 全局根导航 Key,用于在非 Widget 上下文中进行导航 final rootNavigatorKey = GlobalKey(); final _shellNavigatorKey = GlobalKey(); /// 备份助记词页面参数 (新版 - 只需要用户序列号) class BackupMnemonicParams { final String userSerialNum; final String? referralCode; BackupMnemonicParams({ required this.userSerialNum, this.referralCode, }); } /// 确认备份页面参数 class VerifyMnemonicParams { final List mnemonicWords; final String kavaAddress; final String dstAddress; final String bscAddress; final String userSerialNum; final String? referralCode; VerifyMnemonicParams({ required this.mnemonicWords, required this.kavaAddress, required this.dstAddress, required this.bscAddress, required this.userSerialNum, this.referralCode, }); } /// 创建成功页面参数 class WalletCreatedParams { final String kavaAddress; final String dstAddress; final String bscAddress; final String userSerialNum; final String? referralCode; WalletCreatedParams({ required this.kavaAddress, required this.dstAddress, required this.bscAddress, required this.userSerialNum, this.referralCode, }); } /// 分享页面参数 class SharePageParams { final String shareLink; final String? referralCode; SharePageParams({ required this.shareLink, this.referralCode, }); } final appRouterProvider = Provider((ref) { return GoRouter( navigatorKey: rootNavigatorKey, initialLocation: RoutePaths.splash, debugLogDiagnostics: true, routes: [ // Splash Screen GoRoute( path: RoutePaths.splash, name: RouteNames.splash, builder: (context, state) => const SplashPage(), ), // Guide Pages (向导页) GoRoute( path: RoutePaths.guide, name: RouteNames.guide, builder: (context, state) { // 支持传入初始页索引 final initialPage = state.extra as int? ?? 0; return GuidePage(initialPage: initialPage); }, ), // Onboarding / Create Account GoRoute( path: RoutePaths.onboarding, name: RouteNames.onboarding, builder: (context, state) => const OnboardingPage(), ), // Import Mnemonic (导入助记词) GoRoute( path: RoutePaths.importMnemonic, name: RouteNames.importMnemonic, builder: (context, state) => const ImportMnemonicPage(), ), // Phone Register (手机号注册) GoRoute( path: RoutePaths.phoneRegister, name: RouteNames.phoneRegister, builder: (context, state) { final params = state.extra as PhoneRegisterParams?; return PhoneRegisterPage( inviterReferralCode: params?.inviterReferralCode, ); }, ), // Phone Login (手机号+密码登录) GoRoute( path: RoutePaths.phoneLogin, name: RouteNames.phoneLogin, builder: (context, state) { return const PhoneLoginPage(); }, ), // Forgot Password (找回密码) GoRoute( path: RoutePaths.forgotPassword, name: RouteNames.forgotPassword, builder: (context, state) { return const ForgotPasswordPage(); }, ), // SMS Verify (短信验证码) GoRoute( path: RoutePaths.smsVerify, name: RouteNames.smsVerify, builder: (context, state) { final params = state.extra as SmsVerifyParams; return SmsVerifyPage( phoneNumber: params.phoneNumber, type: params.type, inviterReferralCode: params.inviterReferralCode, ); }, ), // Set Password (设置登录密码) GoRoute( path: RoutePaths.setPassword, name: RouteNames.setPassword, builder: (context, state) { final params = state.extra as SetPasswordParams; return SetPasswordPage( userSerialNum: params.userSerialNum, inviterReferralCode: params.inviterReferralCode, phoneNumber: params.phoneNumber, smsCode: params.smsCode, skipVerify: params.skipVerify, ); }, ), // Backup Mnemonic (备份助记词 - 会调用 API 获取钱包信息,已屏蔽) GoRoute( path: RoutePaths.backupMnemonic, name: RouteNames.backupMnemonic, builder: (context, state) { final params = state.extra as BackupMnemonicParams; return BackupMnemonicPage( userSerialNum: params.userSerialNum, referralCode: params.referralCode, ); }, ), // Verify Mnemonic (确认备份) GoRoute( path: RoutePaths.verifyMnemonic, name: RouteNames.verifyMnemonic, builder: (context, state) { final params = state.extra as VerifyMnemonicParams; return VerifyMnemonicPage( mnemonicWords: params.mnemonicWords, kavaAddress: params.kavaAddress, dstAddress: params.dstAddress, bscAddress: params.bscAddress, userSerialNum: params.userSerialNum, referralCode: params.referralCode, ); }, ), // Wallet Created (创建成功) GoRoute( path: RoutePaths.walletCreated, name: RouteNames.walletCreated, builder: (context, state) { final params = state.extra as WalletCreatedParams; return WalletCreatedPage( kavaAddress: params.kavaAddress, dstAddress: params.dstAddress, bscAddress: params.bscAddress, userSerialNum: params.userSerialNum, referralCode: params.referralCode, ); }, ), // Edit Profile (编辑资料) GoRoute( path: RoutePaths.editProfile, name: RouteNames.editProfile, builder: (context, state) => const EditProfilePage(), ), // Notification Inbox (通知中心) GoRoute( path: RoutePaths.notifications, name: RouteNames.notifications, builder: (context, state) => const NotificationInboxPage(), ), // Account Switch Page (账号切换) GoRoute( path: RoutePaths.accountSwitch, name: RouteNames.accountSwitch, builder: (context, state) => const AccountSwitchPage(), ), // Share Page (分享页面) GoRoute( path: RoutePaths.share, name: RouteNames.share, builder: (context, state) { final params = state.extra as SharePageParams; return SharePage( shareLink: params.shareLink, referralCode: params.referralCode, ); }, ), // Deposit USDT Page (充值 USDT) GoRoute( path: RoutePaths.depositUsdt, name: RouteNames.depositUsdt, builder: (context, state) => const DepositUsdtPage(), ), // Planting Quantity Page (认种 - 选择数量) GoRoute( path: RoutePaths.plantingQuantity, name: RouteNames.plantingQuantity, builder: (context, state) => const PlantingQuantityPage(), ), // Planting Location Page (认种 - 选择省市) GoRoute( path: RoutePaths.plantingLocation, name: RouteNames.plantingLocation, builder: (context, state) { final params = state.extra as PlantingLocationParams; return PlantingLocationPage( quantity: params.quantity, totalPrice: params.totalPrice, orderNo: params.orderNo, ); }, ), // Google Auth Page (谷歌验证器) GoRoute( path: RoutePaths.googleAuth, name: RouteNames.googleAuth, builder: (context, state) => const GoogleAuthPage(), ), // Change Password Page (修改密码) GoRoute( path: RoutePaths.changePassword, name: RouteNames.changePassword, builder: (context, state) => const ChangePasswordPage(), ), // Bind Email Page (绑定邮箱) GoRoute( path: RoutePaths.bindEmail, name: RouteNames.bindEmail, builder: (context, state) => const BindEmailPage(), ), // Authorization Apply Page (自助申请授权) GoRoute( path: RoutePaths.authorizationApply, name: RouteNames.authorizationApply, builder: (context, state) => const AuthorizationApplyPage(), ), // Ledger Detail Page (账本明细) GoRoute( path: RoutePaths.ledgerDetail, name: RouteNames.ledgerDetail, builder: (context, state) => const LedgerDetailPage(), ), // Withdraw USDT Page (USDT 提款) GoRoute( path: RoutePaths.withdrawUsdt, name: RouteNames.withdrawUsdt, builder: (context, state) => const WithdrawUsdtPage(), ), // Withdraw Confirm Page (提款确认) GoRoute( path: RoutePaths.withdrawConfirm, name: RouteNames.withdrawConfirm, builder: (context, state) { final params = state.extra as WithdrawUsdtParams; return WithdrawConfirmPage(params: params); }, ), // Withdraw Fiat Page (法币提现) GoRoute( path: RoutePaths.withdrawFiat, name: RouteNames.withdrawFiat, builder: (context, state) => const WithdrawFiatPage(), ), // Withdraw Fiat Confirm Page (法币提现确认) GoRoute( path: RoutePaths.withdrawFiatConfirm, name: RouteNames.withdrawFiatConfirm, builder: (context, state) { final params = state.extra as WithdrawFiatParams; return WithdrawFiatConfirmPage(params: params); }, ), // KYC Entry Page (实名认证入口) GoRoute( path: RoutePaths.kycEntry, name: RouteNames.kycEntry, builder: (context, state) { // 从认种流程来时会带 orderNo final orderNo = state.extra as String?; return KycEntryPage(orderNo: orderNo); }, ), // KYC Phone Verification Page (手机号验证) GoRoute( path: RoutePaths.kycPhone, name: RouteNames.kycPhone, builder: (context, state) => const KycPhonePage(), ), // KYC ID Verification Page (层级1: 实名认证 - 二要素) GoRoute( path: RoutePaths.kycId, name: RouteNames.kycId, builder: (context, state) { // 从认种流程来时会带 orderNo final orderNo = state.extra as String?; return KycIdPage(orderNo: orderNo); }, ), // KYC Face Verification Page (层级2: 实人认证 - 人脸活体) GoRoute( path: RoutePaths.kycFace, name: RouteNames.kycFace, builder: (context, state) => const KycFacePage(), ), // KYC ID Card Upload Page (层级3: KYC - 证件照上传) GoRoute( path: RoutePaths.kycIdCard, name: RouteNames.kycIdCard, builder: (context, state) => const KycIdCardPage(), ), // Change Phone Page (更换手机号) GoRoute( path: RoutePaths.changePhone, name: RouteNames.changePhone, builder: (context, state) => const ChangePhonePage(), ), // Pending Contracts Page (待签署合同列表) // 注意:必须放在 contractSigning/:orderNo 前面,否则 "pending" 会被当成 orderNo GoRoute( path: RoutePaths.pendingContracts, name: RouteNames.pendingContracts, builder: (context, state) { final forceSign = state.extra as bool? ?? false; return PendingContractsPage(forceSign: forceSign); }, ), // Contract Signing Page (合同签署) GoRoute( path: '${RoutePaths.contractSigning}/:orderNo', name: RouteNames.contractSigning, builder: (context, state) { final orderNo = state.pathParameters['orderNo'] ?? ''; return ContractSigningPage(orderNo: orderNo); }, ), // Pending Actions Page (待办操作) GoRoute( path: RoutePaths.pendingActions, name: RouteNames.pendingActions, builder: (context, state) => const PendingActionsPage(), ), // Main Shell with Bottom Navigation ShellRoute( navigatorKey: _shellNavigatorKey, builder: (context, state, child) => HomeShellPage(child: child), routes: [ // Ranking Tab GoRoute( path: RoutePaths.ranking, name: RouteNames.ranking, pageBuilder: (context, state) => const NoTransitionPage( child: RankingPage(), ), ), // Mining Tab GoRoute( path: RoutePaths.mining, name: RouteNames.mining, pageBuilder: (context, state) => const NoTransitionPage( child: MiningPage(), ), ), // Trading Tab GoRoute( path: RoutePaths.trading, name: RouteNames.trading, pageBuilder: (context, state) => const NoTransitionPage( child: TradingPage(), ), ), // Profile Tab GoRoute( path: RoutePaths.profile, name: RouteNames.profile, pageBuilder: (context, state) => const NoTransitionPage( child: ProfilePage(), ), ), ], ), ], ); });