user_util.dart 1.56 KB
import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:wow_english/common/core/sp_const.dart';
import 'package:wow_english/models/user_entity.dart';
import 'package:wow_english/route/route.dart';
import 'package:wow_english/utils/sp_util.dart';

class UserUtil {
  static UserEntity? _userEntity;

  static String get token => _userEntity?.token ?? '';

  static void saveUser(UserEntity user) {
    _userEntity = user;
    _saveUserJson(user.toString());
  }

  static UserEntity? getUser() {
    if (_userEntity == null) {
      String? userJson = _getUserJson();
      if (userJson != null && userJson.isNotEmpty) {
        try {
          var userEntity = UserEntity.fromJson(json.decode(userJson));
          // todo 并且在有效期,计算一下, "expireTime": 2592000 倒计时需要手动转换,后面再优化
          _userEntity = userEntity;
        } catch (e) {
          if (kDebugMode) {
            print(e);
          }
          _clearUserData();
        }
      }
    }
    return _userEntity;
  }

  static void _saveUserJson(String userJson) {
    SpUtil.getInstance().setData(SpConst.prefsKeyUserInfo, userJson);
  }

  static String? _getUserJson() {
    return SpUtil.getInstance().get<String>(SpConst.prefsKeyUserInfo);
  }

  static void _clearUserData() {
    _userEntity = null;
    SpUtil.getInstance().remove(SpConst.prefsKeyUserInfo);
  }

  static void logout() {
    _clearUserData();
    Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false);
  }
}