import 'package:chat/models/user_info_model.dart'; import 'package:chat/providers/auth_provider.dart'; import 'package:chat/routes/auth_routes.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 { 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; return true; } else { return false; } } /// 退出登录 void logout() async { await TencentImSDKPlugin.v2TIMManager.logout(); _box.remove('userSig'); _box.remove('userId'); _box.remove('userToken'); userSig = ''; userId = ''; userToken = ''; userInfo.value = UserInfoModel.empty(); isLogin.value = false; Get.offAllNamed(AuthRoutes.index); } }