up
This commit is contained in:
+8
-16
@@ -31,11 +31,18 @@ import '../services/payment_service.dart';
|
||||
/// /home 对游客开放(游客可浏览 Feed,观看超限 2002 时才引导登录);
|
||||
/// 受保护页面(上传/钱包/会员等)在各自页面入口校验登录态并跳 /login。
|
||||
final routerProvider = Provider<GoRouter>((ref) {
|
||||
final auth = ref.watch(authProvider);
|
||||
// 认证状态变化仅触发 redirect 重估(refreshListenable),
|
||||
// 绝不能 watch 后重建 GoRouter —— 重建会把当前路由重置回启动页,
|
||||
// 启动页再次执行 bootstrap → 状态再变化 → 无限循环(卡死在启动页)。
|
||||
final refresh = ValueNotifier<int>(0);
|
||||
ref.listen(authProvider, (_, __) => refresh.value++);
|
||||
ref.onDispose(refresh.dispose);
|
||||
|
||||
return GoRouter(
|
||||
initialLocation: '/',
|
||||
refreshListenable: refresh,
|
||||
redirect: (context, state) {
|
||||
final auth = ref.read(authProvider);
|
||||
final loggingIn = state.matchedLocation == '/login' ||
|
||||
state.matchedLocation == '/register';
|
||||
// 启动恢复未完成:停在 splash
|
||||
@@ -116,18 +123,3 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
/// 兜底页面(迭代期占位)
|
||||
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))),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user