遗漏文件的提交

This commit is contained in:
2026-06-17 13:47:24 +08:00
parent 443ce601a0
commit a6143f2ba7

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import 'package:maibu_satabot_v2/core/consts/tcp_consts.dart';
@@ -23,6 +24,7 @@ import '../../../../features/v2/site/presentation/cubit/site_cubit.dart';
import '../../data/datasources/auth_tcp_datasource.dart';
import '../../data/datasources/impl/auth_tcp_datasource_impl.dart';
import 'auth_state.dart';
import '../../../../main.dart'; // 🔥 导入 main.dart 以使用 navigatorKey
/// emit做的事情:
/// 1.修改状态标志:通过改变类的类型(从 Initial 变成 Authenticated)
@@ -101,11 +103,50 @@ class AuthCubit extends Cubit<AuthState> {
_clearAllBusinessState();
await storage.deleteUser();
tcp.disconnect(); // 断开后会自动重连
tcp.forceDisconnect(); // 🔥 修复:彻底断开连接,禁止自动重连
appCubit.clearAuth();
emit(AuthUnauthenticated());
}
/// 🔥 新增:显示异地登录提示弹窗
void _showKickOutDialog() {
try {
debugPrint('>>> [AUTH] 📢 准备显示异地登录提示弹窗');
_logger.logWithLevel('>>> [AUTH] 📢 准备显示异地登录提示弹窗', shouldLog: true);
// 使用全局 navigatorKey 显示弹窗
final context = navigatorKey.currentContext;
if (context != null) {
showDialog(
context: context,
barrierDismissible: false, // 不允许点击背景关闭
builder: (BuildContext dialogContext) {
return AlertDialog(
title: const Text('账号被顶下线'),
content: const Text('您的账号在其他设备登录,即将退出当前设备...'),
actions: [],
);
},
);
} else {
debugPrint('>>> [AUTH] ⚠️ 无法获取 Navigator Context,将直接退出');
_logger.logWithLevel('>>> [AUTH] ⚠️ 无法获取 Navigator Context,将直接退出', shouldLog: true);
}
// 🔥 延迟 2 秒后执行退出,给用户时间看到提示
Future.delayed(const Duration(seconds: 2), () {
debugPrint('>>> [AUTH] ⏰ 延迟结束,开始执行退出登录');
_logger.logWithLevel('>>> [AUTH] ⏰ 延迟结束,开始执行退出登录', shouldLog: true);
logout();
});
} catch (e) {
debugPrint('>>> [AUTH] ❌ 显示弹窗失败:$e');
_logger.logWithLevel('>>> [AUTH] ❌ 显示弹窗失败:$e', level: 'ERROR');
// 即使显示弹窗失败,也要执行退出
logout();
}
}
/// 🔥 新增:清空所有业务状态,防止数据泄露到新账户
void _clearAllBusinessState() {
try {
@@ -178,7 +219,8 @@ class AuthCubit extends Cubit<AuthState> {
'⚠️ [AUTH] 检测到异地登录 (respond=have_logged_in),开始退出...',
level: 'INFO',
);
logout();
// 🔥 修复:先显示友好提示,再执行退出
_showKickOutDialog();
} else {
debugPrint('>>> [AUTH] ℹ️ 收到 0x12 消息,respond="$respond",不处理');
}