mobile_skt/lib/store/auth.store.dart

150 lines
4.4 KiB
Dart
Raw Normal View History

import 'dart:convert';
import 'package:dio/dio.dart' as Dio;
import 'package:get/get.dart';
import 'package:sk_base_mobile/apis/api.dart' as Api;
import 'package:sk_base_mobile/util/logger_util.dart';
import 'package:sk_base_mobile/widgets/tap_to_dismiss_keyboard.dart';
import 'package:sk_base_mobile/config.dart';
import 'package:sk_base_mobile/models/auth.dart';
import 'package:sk_base_mobile/models/user_info.model.dart';
import 'package:sk_base_mobile/services/service.dart';
import '../constants/constants.dart';
import '../util/util.dart';
class AuthStore extends GetxController {
static AuthStore get to => Get.find();
final userInfo = UserInfoModel().obs;
Future<AuthStore> init() async {
try {
String? preUserInfo =
StorageService.to.getString(CacheKeys.userInfo, isWithUser: false);
String? token =
StorageService.to.getString(CacheKeys.token, isWithUser: false);
2024-03-19 13:27:42 +08:00
if (token != null) {
if (preUserInfo != null) {
userInfo(UserInfoModel.fromJson(jsonDecode(preUserInfo)));
LoggerUtil().info('[Store-Auth] userId: ${userInfo.value.id}');
}
}
} catch (e) {
LoggerUtil().info(
'[Store-Auth]Init failed, please try again.${e}',
);
}
return this;
}
Future<void> deleteAccount() async {
2024-03-19 10:02:20 +08:00
await LoadingUtil.to.show(status: 'Deleting...');
try {
final response = await Api.deleteAccount();
if (response.data != null) {
await SnackBarUtil().success('Delete account succeed.');
await logout();
}
} catch (e) {
await SnackBarUtil().error('Delete account faield. Please try again.');
} finally {
2024-03-19 10:02:20 +08:00
await LoadingUtil.to.dismiss();
;
}
}
Future<void> logout({bool force = false}) async {
2024-03-19 10:02:20 +08:00
LoadingUtil.to.show(status: 'Logout...');
await StorageService.to.remove(CacheKeys.token, isWithUser: false);
await StorageService.to.remove(CacheKeys.userInfo, isWithUser: false);
try {
2024-03-19 08:59:08 +08:00
// final response = await Api.logout();
// if (response.data != null) {
LoggerUtil().info('[Store-Auth] Logout succeed.');
2024-03-19 10:02:20 +08:00
Get.offAllNamed(RouteConfig.login);
2024-03-19 08:59:08 +08:00
// }
} catch (e) {
2024-03-19 10:02:20 +08:00
print(e);
} finally {
2024-03-19 10:02:20 +08:00
LoadingUtil.to.dismiss();
}
}
2024-03-19 08:59:08 +08:00
Future<void> login(
{required String username, required String password}) async {
Dio.Response response;
2024-03-19 08:59:08 +08:00
// if (type == LoginEnum.fastLogin &&
// StorageService.to.getString(CacheKeys.deviceUUID, isWithUser: false) ==
// null) {
// SnackBarUtil().error('Need DeviceUUID. Please restart app.');
// return;
// }
2024-03-19 10:02:20 +08:00
LoadingUtil.to.show();
TapToDismissKeyboard.dismissOf(context: Get.context!);
try {
2024-03-19 08:59:08 +08:00
await Future.delayed(const Duration(seconds: 1));
response = await Api.login(username, password);
if (response.data != null) {
final auth = Auth.fromJson(response.data['data']);
2024-03-19 08:59:08 +08:00
if (auth.token != null) {
await StorageService.to
.setString(CacheKeys.token, auth.token!, isWithUser: false);
}
2024-03-19 08:59:08 +08:00
await getUserInfo();
Get.offNamed(RouteConfig.home);
2024-03-19 08:59:08 +08:00
// getCommonInfo();
}
} catch (e) {
2024-03-19 08:59:08 +08:00
await SnackBarUtil().error('账号密码错误');
} finally {
2024-03-19 10:02:20 +08:00
LoadingUtil.to.dismiss();
}
}
Future<void> updateUserInfoState(UserInfoModel newInfo) async {
userInfo(newInfo);
await StorageService.to
.setString(CacheKeys.userInfo, jsonEncode(newInfo), isWithUser: false);
}
Future<void> getUserInfo() async {
2024-03-19 10:02:20 +08:00
await LoadingUtil.to.show();
try {
2024-03-19 08:59:08 +08:00
final response = await Api.getUserInfo();
if (response.data != null) {
UserInfoModel userInfo = UserInfoModel.fromJson(response.data['data']);
await updateUserInfoState(userInfo);
}
} catch (e) {
SnackBarUtil().error('$e');
} finally {
2024-03-19 10:02:20 +08:00
LoadingUtil.to.dismiss();
}
}
Future<void> saveUserInfo(Map<String, dynamic> data) async {
2024-03-19 10:02:20 +08:00
LoadingUtil.to.show(status: 'Saving...');
try {
final res = await Api.saveUserInfo(data);
if (res.data != null) {
await getUserInfo();
SnackBarUtil().success('Save successfully.');
}
} catch (e) {
SnackBarUtil().error('$e');
} finally {
2024-03-19 10:02:20 +08:00
LoadingUtil.to.dismiss();
}
}
Future<void> getCommonInfo() async {
await AppInfoService.to.getAppConfig();
await Future.wait([
/// 依赖业务信息
// Get.putAsync<BlockStore>(() => BlockStore().init()),
]);
}
}