遗漏文件的提交
This commit is contained in:
@@ -2,6 +2,7 @@ import 'dart:async';
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:get_it/get_it.dart';
|
import 'package:get_it/get_it.dart';
|
||||||
import 'package:maibu_satabot_v2/core/consts/tcp_consts.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/auth_tcp_datasource.dart';
|
||||||
import '../../data/datasources/impl/auth_tcp_datasource_impl.dart';
|
import '../../data/datasources/impl/auth_tcp_datasource_impl.dart';
|
||||||
import 'auth_state.dart';
|
import 'auth_state.dart';
|
||||||
|
import '../../../../main.dart'; // 🔥 导入 main.dart 以使用 navigatorKey
|
||||||
|
|
||||||
/// emit做的事情:
|
/// emit做的事情:
|
||||||
/// 1.修改状态标志:通过改变类的类型(从 Initial 变成 Authenticated)
|
/// 1.修改状态标志:通过改变类的类型(从 Initial 变成 Authenticated)
|
||||||
@@ -101,11 +103,50 @@ class AuthCubit extends Cubit<AuthState> {
|
|||||||
_clearAllBusinessState();
|
_clearAllBusinessState();
|
||||||
|
|
||||||
await storage.deleteUser();
|
await storage.deleteUser();
|
||||||
tcp.disconnect(); // 断开后会自动重连
|
tcp.forceDisconnect(); // 🔥 修复:彻底断开连接,禁止自动重连
|
||||||
appCubit.clearAuth();
|
appCubit.clearAuth();
|
||||||
emit(AuthUnauthenticated());
|
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() {
|
void _clearAllBusinessState() {
|
||||||
try {
|
try {
|
||||||
@@ -178,7 +219,8 @@ class AuthCubit extends Cubit<AuthState> {
|
|||||||
'⚠️ [AUTH] 检测到异地登录 (respond=have_logged_in),开始退出...',
|
'⚠️ [AUTH] 检测到异地登录 (respond=have_logged_in),开始退出...',
|
||||||
level: 'INFO',
|
level: 'INFO',
|
||||||
);
|
);
|
||||||
logout();
|
// 🔥 修复:先显示友好提示,再执行退出
|
||||||
|
_showKickOutDialog();
|
||||||
} else {
|
} else {
|
||||||
debugPrint('>>> [AUTH] ℹ️ 收到 0x12 消息,respond="$respond",不处理');
|
debugPrint('>>> [AUTH] ℹ️ 收到 0x12 消息,respond="$respond",不处理');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user