From ad68952731bc09d1298c58abc32238b5947d8508 Mon Sep 17 00:00:00 2001 From: Songzex <2402265378@qq.com> Date: Wed, 6 May 2026 16:09:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E8=80=A6=E7=99=BB=E5=BD=95=E4=B8=ADTC?= =?UTF-8?q?P=E8=BF=9E=E6=8E=A5=E7=9A=84=E5=BF=85=E8=A6=81=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E5=85=B6=E8=83=BD=E5=A4=9F=E5=BF=AB=E9=80=9F=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E7=99=BB=E5=BD=95=E3=80=823.5=E7=A7=92=20=E9=99=8D?= =?UTF-8?q?=E4=BD=8E=E5=88=B0=20<1=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/router/app_router.dart | 4 ++-- .../auth/presentation/bloc/auth_cubit.dart | 21 +++++++++++++++---- .../auth/presentation/pages/login_page.dart | 4 +++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/core/router/app_router.dart b/lib/core/router/app_router.dart index 8e108c8b..df18c213 100644 --- a/lib/core/router/app_router.dart +++ b/lib/core/router/app_router.dart @@ -45,8 +45,8 @@ GoRouter createRouter(AuthCubit authCubit) { // 注册登录注册 路由 GoRoute( - path: RoutePaths.machineDetails, - builder: (context, state) => const LoginPage(), // 替换为实际页面 + path: RoutePaths.login, + builder: (context, state) => const LoginPage(), ), // 1. 外部路由(无底部导航栏) diff --git a/lib/features/auth/presentation/bloc/auth_cubit.dart b/lib/features/auth/presentation/bloc/auth_cubit.dart index ae2f3fff..6993a526 100644 --- a/lib/features/auth/presentation/bloc/auth_cubit.dart +++ b/lib/features/auth/presentation/bloc/auth_cubit.dart @@ -68,12 +68,25 @@ class AuthCubit extends Cubit { /// 当 HTTP 登录/注册成功后调用 Future loginSuccess(UserEntity user) async { - await storage.saveUser(user); - await tcp.connect(host: TCPConsts.TCP_IP, port: TCPConsts.TCP_PORT); - // await _authTcpDatasource.sendAuthPacket(); //包括发送认证包和获取列表和切换函数 - //tcp.startHeartbeat(interval: const Duration(seconds: 4)); //启动心跳 + // 🔥 关键修复:先立即更新状态,触发 GoRouter redirect appCubit.setAuth(user); emit(AuthAuthenticated(user)); + + // 然后异步执行其他操作(使用 unawaited 避免阻塞) + _performPostLoginTasks(user); + } + + /// 登录后后台任务(不阻塞主流程) + Future _performPostLoginTasks(UserEntity user) async { + try { + await storage.saveUser(user); + await tcp.connect(host: TCPConsts.TCP_IP, port: TCPConsts.TCP_PORT); + // await _authTcpDatasource.sendAuthPacket(); + // tcp.startHeartbeat(interval: const Duration(seconds: 4)); + } catch (e) { + _logger.logWithLevel('[AUTH] 登录后任务失败: $e', level: 'ERROR'); + // 不影响已登录状态,只是记录错误 + } } /// 退出登录 (主动或被动) diff --git a/lib/features/auth/presentation/pages/login_page.dart b/lib/features/auth/presentation/pages/login_page.dart index ab0695c0..9c46a550 100644 --- a/lib/features/auth/presentation/pages/login_page.dart +++ b/lib/features/auth/presentation/pages/login_page.dart @@ -39,7 +39,9 @@ class _LoginPageState extends State { body: BlocListener( listener: (context, state) { if (state is LoginSuccess) { - context.go(RoutePaths.home); + // 登录成功后,AuthCubit 状态已更新 + // GoRouter 的 redirect 会自动检测到已登录状态并跳转到首页 + // 不需要手动调用 context.go } else if (state is LoginFailure) { // 可以在这里弹出简洁的黑白提示框 ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('登录失败,${state.message}')));