You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
4.0 KiB
157 lines
4.0 KiB
import 'package:get/get.dart';
|
|
import 'package:get_storage/get_storage.dart';
|
|
import 'package:logger/logger.dart';
|
|
import '../../modules/login/controllers/googleLogin.dart';
|
|
import '../../modules/login/controllers/facebookLogin.dart';
|
|
import '../services/network/api.dart';
|
|
|
|
/// 账号管理服务
|
|
///
|
|
/// 负责处理所有与用户账号相关的操作,包括登出和账号删除
|
|
class AccountService extends GetxService {
|
|
final GetStorage _storage = GetStorage();
|
|
final logger = Logger();
|
|
|
|
/// 初始化服务
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
logger.d('AccountService 已初始化');
|
|
}
|
|
|
|
/// 清理本地用户数据
|
|
///
|
|
/// 返回操作是否成功
|
|
Future<bool> clearUserData() async {
|
|
try {
|
|
// 清理所有存储
|
|
//await _storage.erase();
|
|
// 或者逐个清理关键存储项
|
|
await _storage.write("logintoken", null);
|
|
await _storage.write("user_info", null);
|
|
await _storage.write("local_avatar", null);
|
|
logger.d('用户数据清理成功');
|
|
return true;
|
|
} catch (e) {
|
|
logger.e('用户数据清理失败: $e');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
Future<bool> clearAllUserData() async {
|
|
// 清理所有用户数据
|
|
try {
|
|
await _storage.erase();
|
|
logger.d('所有用户数据清理成功');
|
|
return true;
|
|
} catch (e) {
|
|
logger.e('用户数据清理失败: $e');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// 退出第三方登录
|
|
///
|
|
/// 返回操作是否成功
|
|
Future<bool> logoutThirdParty() async {
|
|
try {
|
|
final google = Google();
|
|
final facebook = Facebook();
|
|
await Future.wait([
|
|
google.signOutGoogle(),
|
|
facebook.signOutFacebook(),
|
|
]);
|
|
logger.d('第三方登录退出成功');
|
|
return true;
|
|
} catch (e) {
|
|
logger.e('第三方登录退出失败: $e');
|
|
// 返回true,因为这不应阻止整体登出流程
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/// 用户登出
|
|
///
|
|
/// 清理本地数据并退出第三方登录
|
|
/// 返回操作结果,包含成功状态和错误信息
|
|
Future<AccountOperationResult> signOut() async {
|
|
try {
|
|
// 清理本地数据
|
|
final dataCleaned = await clearUserData();
|
|
if (!dataCleaned) {
|
|
return AccountOperationResult(
|
|
success: false,
|
|
errorMessage: '清理用户数据失败',
|
|
);
|
|
}
|
|
|
|
// 退出第三方登录
|
|
await logoutThirdParty();
|
|
|
|
return AccountOperationResult(
|
|
success: true,
|
|
message: '已退出登录',
|
|
);
|
|
} catch (e) {
|
|
logger.e('登出过程发生错误: $e');
|
|
return AccountOperationResult(
|
|
success: false,
|
|
errorMessage: '退出登录失败,请重试',
|
|
);
|
|
}
|
|
}
|
|
|
|
/// 删除用户账号
|
|
///
|
|
/// 调用API删除账号,然后清理本地数据
|
|
/// 返回操作结果,包含成功状态和错误信息
|
|
Future<AccountOperationResult> deleteAccount() async {
|
|
try {
|
|
// 调用API删除账号
|
|
final response = await Api.deleteUser();
|
|
if (response == null) {
|
|
return AccountOperationResult(
|
|
success: false,
|
|
errorMessage: '删除用户数据失败',
|
|
);
|
|
}
|
|
|
|
// 清理本地数据
|
|
final dataCleaned = await clearAllUserData(); // 一次性清除所有数据
|
|
|
|
if (!dataCleaned) {
|
|
return AccountOperationResult(
|
|
success: false,
|
|
errorMessage: '清理用户数据失败',
|
|
);
|
|
}
|
|
|
|
// 退出第三方登录
|
|
await logoutThirdParty();
|
|
|
|
return AccountOperationResult(
|
|
success: true,
|
|
message: '账号已被永久删除',
|
|
);
|
|
} catch (e) {
|
|
logger.e('删除账号过程发生错误: $e');
|
|
return AccountOperationResult(
|
|
success: false,
|
|
errorMessage: '删除账号失败,请重试',
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 账号操作结果
|
|
class AccountOperationResult {
|
|
final bool success;
|
|
final String? message;
|
|
final String? errorMessage;
|
|
|
|
AccountOperationResult({
|
|
required this.success,
|
|
this.message,
|
|
this.errorMessage,
|
|
});
|
|
}
|
|
|