Browse Source
- 创建AccountService处理账号相关操作包括登出和删除 - 在InitialBinding中注册账号服务 - 重构ProfileController使用账号服务处理登出和删除逻辑 - 添加操作结果封装类AccountOperationResultnewdev_shunjiawei
3 changed files with 204 additions and 50 deletions
@ -0,0 +1,144 @@ |
|||||
|
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> 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 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: '删除账号失败,请重试', |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// 账号操作结果 |
||||
|
class AccountOperationResult { |
||||
|
final bool success; |
||||
|
final String? message; |
||||
|
final String? errorMessage; |
||||
|
|
||||
|
AccountOperationResult({ |
||||
|
required this.success, |
||||
|
this.message, |
||||
|
this.errorMessage, |
||||
|
}); |
||||
|
} |
||||
Loading…
Reference in new issue