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.2 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: 'clearUserDataFailed'.tr, // 清理用户数据失败
);
}
// 退出第三方登录
await logoutThirdParty();
return AccountOperationResult(
success: true,
message: 'loggedOut'.tr,
);
} catch (e) {
logger.e('登出过程发生错误: $e');
return AccountOperationResult(
success: false,
errorMessage: 'logoutFailedRetry'.tr, // 退出登录失败,请重试
);
}
}
/// 删除用户账号
///
/// 调用API删除账号,然后清理本地数据
/// 返回操作结果,包含成功状态和错误信息
Future<AccountOperationResult> deleteAccount() async {
try {
// 调用API删除账号
final response = await Api.deleteUser();
if (response == null) {
return AccountOperationResult(
success: false,
errorMessage: 'deleteUserDataFailed'.tr, // 删除用户数据失败
);
}
// 清理本地数据
final dataCleaned = await clearAllUserData(); // 一次性清除所有数据
if (!dataCleaned) {
return AccountOperationResult(
success: false,
errorMessage: 'clearUserDataFailed'.tr, // 清理用户数据失败
);
}
// 退出第三方登录
await logoutThirdParty();
return AccountOperationResult(
success: true,
message: 'accountPermanentlyDeleted'.tr, // 账号已被永久删除
);
} catch (e) {
logger.e('删除账号过程发生错误: $e');
return AccountOperationResult(
success: false,
errorMessage: 'deleteAccountFailedRetry'.tr, // 删除账号失败,请重试
);
}
}
}
/// 账号操作结果
class AccountOperationResult {
final bool success;
final String? message;
final String? errorMessage;
AccountOperationResult({
required this.success,
this.message,
this.errorMessage,
});
}