This commit is contained in:
macbook_max
2026-10-15 20:36:59 +08:00
commit 6bf949949c
7923 changed files with 1369582 additions and 0 deletions
+133
View File
@@ -0,0 +1,133 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import '../models/video_item.dart';
import '../providers/auth_provider.dart';
import '../screens/assets/assets_screen.dart';
import '../screens/assets/withdraw_screen.dart';
import '../screens/auth/login_screen.dart';
import '../screens/auth/register_screen.dart';
import '../screens/home/home_shell.dart';
import '../screens/membership/membership_screen.dart';
import '../screens/notification/notifications_screen.dart';
import '../screens/payment/recharge_screen.dart';
import '../screens/payment/usdt_pay_screen.dart';
import '../screens/player/simple_player_screen.dart';
import '../screens/profile/edit_video_screen.dart';
import '../screens/profile/invite_screen.dart';
import '../screens/profile/profile_edit_screen.dart';
import '../screens/profile/user_profile_screen.dart';
import '../screens/profile/video_list_screens.dart';
import '../screens/search/search_screen.dart';
import '../screens/search/tag_videos_screen.dart';
import '../screens/settings/settings_screen.dart';
import '../screens/splash/splash_screen.dart';
import '../screens/upload/upload_screen.dart';
import '../screens/wallet/wallet_screen.dart';
import '../services/payment_service.dart';
/// 声明式路由(02-技术文档:go_router)
/// /home 对游客开放(游客可浏览 Feed,观看超限 2002 时才引导登录);
/// 受保护页面(上传/钱包/会员等)在各自页面入口校验登录态并跳 /login。
final routerProvider = Provider<GoRouter>((ref) {
final auth = ref.watch(authProvider);
return GoRouter(
initialLocation: '/',
redirect: (context, state) {
final loggingIn = state.matchedLocation == '/login' ||
state.matchedLocation == '/register';
// 启动恢复未完成:停在 splash
if (!auth.restored && state.matchedLocation != '/') return '/';
// 已登录去登录页 → 回首页
if (auth.isLoggedIn && loggingIn) return '/home';
return null;
},
routes: [
GoRoute(path: '/', builder: (_, __) => const SplashScreen()),
GoRoute(path: '/login', builder: (_, __) => const LoginScreen()),
GoRoute(path: '/register', builder: (_, __) => const RegisterScreen()),
GoRoute(path: '/home', builder: (_, __) => const HomeShell()),
GoRoute(path: '/search', builder: (_, __) => const SearchScreen()),
// 标签视频页(游客可)
GoRoute(
path: '/tags/:name',
builder: (_, state) =>
TagVideosScreen(tagName: state.pathParameters['name']!),
),
// 搜索结果单视频播放(extra 传 VideoItem)
GoRoute(
path: '/search/play',
builder: (_, state) =>
SimplePlayerScreen(item: state.extra! as VideoItem),
),
// 他人公开主页(游客可)
GoRoute(
path: '/user/:id',
builder: (_, state) =>
UserProfileScreen(userId: int.parse(state.pathParameters['id']!)),
),
// 我的:作品/收藏/历史(页面内需登录,未登录由入口守卫)
GoRoute(path: '/mine/works', builder: (_, __) => VideoGridScreen.works()),
// 编辑作品(extra 传 VideoItem,仅作者)
GoRoute(
path: '/mine/works/edit',
builder: (_, state) =>
EditVideoScreen(video: state.extra! as VideoItem),
),
GoRoute(
path: '/mine/favorites',
builder: (_, __) => VideoGridScreen.favorites(),
),
GoRoute(path: '/mine/history', builder: (_, __) => const HistoryScreen()),
// 编辑资料 / 头像(页面内兜底未登录引导)
GoRoute(
path: '/profile/edit',
builder: (_, __) => const ProfileEditScreen(),
),
// 钱包 / 会员中心(页面内兜底未登录引导)
GoRoute(path: '/wallet', builder: (_, __) => const WalletScreen()),
GoRoute(path: '/membership', builder: (_, __) => const MembershipScreen()),
// 消息通知(页面内兜底未登录引导)
GoRoute(
path: '/notifications',
builder: (_, __) => const NotificationsScreen(),
),
// 发布作品(页面内兜底未登录引导)
GoRoute(path: '/upload', builder: (_, __) => const UploadScreen()),
// 邀请好友(页面内需登录)
GoRoute(path: '/invite', builder: (_, __) => const InviteScreen()),
// 收益资产 / 提现(页面内兜底未登录引导)
GoRoute(path: '/assets', builder: (_, __) => const AssetsScreen()),
GoRoute(
path: '/assets/withdraw',
builder: (_, __) => const WithdrawScreen(),
),
// 充值 / USDT 支付(需登录,页面内兜底)
GoRoute(path: '/recharge', builder: (_, __) => const RechargeScreen()),
GoRoute(
path: '/recharge/usdt',
builder: (_, state) =>
UsdtPayScreen(order: state.extra! as RechargeOrderInfo),
),
// 设置
GoRoute(path: '/settings', builder: (_, __) => const SettingsScreen()),
],
);
});
/// 兜底页面(迭代期占位)
class PlaceholderScreen extends StatelessWidget {
const PlaceholderScreen({super.key, required this.title});
final String title;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(title)),
body: Center(child: Text(title, style: const TextStyle(fontSize: 16))),
);
}
}