遗漏文件的提交
This commit is contained in:
@@ -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",不处理');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user