From a4670de8ed4179efccb17b550bf4703a2d8646c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Fri, 31 Jul 2026 16:45:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=AE=88=E5=8D=AB=EF=BC=88token=20=E5=A4=B1=E6=95=88=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=9B=9E=E7=99=BB=E5=BD=95=E9=A1=B5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 401 登出后当前页面不跳转,导致主框架停留在异常状态 (如会员状态一直加载);守卫在认证态变化时导航到 /login 或 /home Co-Authored-By: Claude Opus 4.7 --- lib/main.dart | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index dda16a6..5e31a11 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; +import 'core/auth/auth_provider.dart'; import 'features/auth/login_page.dart'; import 'features/cps/cps_product_list_page.dart'; import 'features/cps/cps_provider.dart'; @@ -28,6 +29,22 @@ class SloganApp extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final router = ref.watch(routerProvider); + final auth = ref.watch(authProvider); + // 路由守卫:token 失效/登出 → 回登录页;token 有效且在登录页 → 进主框架 + final path = + router.routerDelegate.currentConfiguration.uri.path; + final authed = auth.value?.authenticated ?? false; + if (!auth.isLoading) { + if (!authed && path != '/login') { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (context.mounted) router.go('/login'); + }); + } else if (authed && path == '/login') { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (context.mounted) router.go('/home'); + }); + } + } return MaterialApp.router( title: '我的形象穿搭', theme: ThemeData(