rwadurian/frontend/mobile-app/lib/routes/app_router.dart

258 lines
8.0 KiB
Dart

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/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/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 'route_paths.dart';
import 'route_names.dart';
final _rootNavigatorKey = GlobalKey<NavigatorState>();
final _shellNavigatorKey = GlobalKey<NavigatorState>();
/// 备份助记词页面参数 (新版 - 只需要用户序列号)
class BackupMnemonicParams {
final int userSerialNum;
final String? referralCode;
BackupMnemonicParams({
required this.userSerialNum,
this.referralCode,
});
}
/// 确认备份页面参数
class VerifyMnemonicParams {
final List<String> mnemonicWords;
final String kavaAddress;
final String dstAddress;
final String bscAddress;
final int 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 int 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<GoRouter>((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) => const GuidePage(),
),
// 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(),
),
// 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(),
),
// 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,
);
},
),
// 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(),
),
),
],
),
],
);
});