user.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:get/get.dart';
  3. import '../defines.dart';
  4. import '../store.dart';
  5. class UserState extends StateModuleBase {
  6. String? _token;
  7. String? _account;
  8. final RxString _displayName = ''.obs;
  9. final RxList<String> _features = RxList<String>();
  10. /// 登录令牌
  11. String? get token => _token;
  12. /// 登录账号
  13. String? get account => _account;
  14. /// 外显名称
  15. String get displayName => _userInfo?.realName ?? _userInfo?.userName ?? "";
  16. /// 团队名称
  17. String get teamName => _userInfo?.teamName ?? "";
  18. /// 是否登录中
  19. bool get isLogOn => token != null && token!.isNotEmpty;
  20. /// 用户信息
  21. UserDTO? _userInfo;
  22. /// 处理登录
  23. Future<void> handleLogin(
  24. String account,
  25. String token,
  26. ) async {
  27. _token = token;
  28. _account = account;
  29. // await _fetchFeatures();// TODO:
  30. await Store.persistent();
  31. }
  32. /// 处理登出
  33. Future<void> handleLogOut() async {
  34. _token = null;
  35. await Store.persistent();
  36. }
  37. /// 更新用户信息
  38. void updateUserInfo(UserDTO dto) {
  39. _userInfo = dto;
  40. }
  41. @override
  42. Future<void> acceptPersistenceJson(Map<String, dynamic> map) async {
  43. // key对应值不为空时,给相应字段赋值
  44. map.pickPersistentProp('token', (x) => _token = x);
  45. map.pickPersistentProp(
  46. 'features',
  47. (x) => _updateFeatures((x as List).cast<String>()),
  48. );
  49. map.pickPersistentProps({
  50. 'account': (x) => _account = x,
  51. 'displayName': (x) => _displayName.value = x,
  52. });
  53. }
  54. @override
  55. Map<String, dynamic> toPersistenceJson() {
  56. return {
  57. "token": token,
  58. "account": account,
  59. "displayName": displayName,
  60. };
  61. }
  62. void _updateFeatures(Iterable<String> keys) {
  63. _features.value = List.unmodifiable(keys);
  64. }
  65. void _clearFeatures() => _features.value = [];
  66. }