import 'package:chat/models/user_info_model.dart'; import 'package:chat/providers/auth_provider.dart'; import 'package:chat/routes/auth_routes.dart'; import 'package:chat/services/tim_service.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:tencent_im_sdk_plugin/tencent_im_sdk_plugin.dart'; class AuthService extends GetxService { static AuthService get to => Get.find(); final _box = GetStorage(); /// 供外部使用的,判断是否登录的状态 get isUserLogin => isLogin.value; /// 登录状态记录,可监听的,这样ever才能监听到 final RxBool isLogin = false.obs; /// 供请求时调用,载入内存,是为了每次使用的时候,不需要从磁盘获取 late String userId = ''; late String userSig = ''; late String userToken = ''; /// 获取存储的token,这个可以做到持久化存储 String get _userId => _box.read('userId') ?? ''; String get _userSig => _box.read('userSig') ?? ''; String get _userToken => _box.read('userToken') ?? ''; Map get _userInfo => _box.read('userInfo') ?? {}; /// 用户信息,这个数据,在更新用户资料的时候,也应该更新 Rx userInfo = UserInfoModel.empty().obs; @override void onInit() { super.onInit(); if (_userToken.isNotEmpty) { isLogin.value = true; userSig = _userSig; userId = _userId; userToken = _userToken; userInfo.value = UserInfoModel.fromJson(_userInfo); } } Future login(String address) async { address = '12dUut3dG5xWi6JPDMjSSK6s2JPcfeKYL1'; var result = await AuthProvider.login(address); if (result != null) { _box.write('userId', result.userID); _box.write('userSig', result.userSig); _box.write('userToken', result.accessToken); _box.write('userInfo', result.userInfo.toJson()); userId = result.userID; userSig = result.userSig; userToken = result.accessToken; userInfo.value = result.userInfo; isLogin.value = true; /// 登录IM TimService.to.initSdk(); return true; } else { return false; } } /// 退出登录 Future logout() async { await TencentImSDKPlugin.v2TIMManager.logout(); _box.remove('userSig'); _box.remove('userId'); _box.remove('userToken'); userSig = ''; userId = ''; userToken = ''; TimService.to.instance.logout(); userInfo.value = UserInfoModel.empty(); isLogin.value = false; Get.offAllNamed(AuthRoutes.index); } }