13 changed files with 633 additions and 488 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