53 lines
1.9 KiB
Dart
53 lines
1.9 KiB
Dart
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
|
|
/// 登录会话持久化:token + 手机号存 secure storage。
|
|
/// 启动时读取判断是否已登录;登出/401 时清除回登录页。
|
|
/// 另存「已确认更新版本」:用户点过「立即更新」后记录服务器版本号,
|
|
/// 与 APK 内 versionName 取较大者参与更新判断(APK 版本号不递增也不会反复提示)。
|
|
class SessionStore {
|
|
static const _storage = FlutterSecureStorage();
|
|
static const _tokenKey = 'auth_token';
|
|
static const _phoneKey = 'auth_phone';
|
|
static const _acceptedUpdateKey = 'accepted_update_version';
|
|
|
|
static String? _cachedToken;
|
|
static String? _cachedPhone;
|
|
static String? _cachedAcceptedUpdate;
|
|
|
|
Future<String?> readToken() async {
|
|
if (_cachedToken != null) return _cachedToken;
|
|
return _cachedToken = await _storage.read(key: _tokenKey);
|
|
}
|
|
|
|
Future<String?> readPhone() async {
|
|
if (_cachedPhone != null) return _cachedPhone;
|
|
return _cachedPhone = await _storage.read(key: _phoneKey);
|
|
}
|
|
|
|
/// 用户点过「立即更新」的服务器版本号(空串 = 从未接受过更新提示)
|
|
Future<String> readAcceptedUpdateVersion() async {
|
|
if (_cachedAcceptedUpdate != null) return _cachedAcceptedUpdate!;
|
|
return _cachedAcceptedUpdate =
|
|
(await _storage.read(key: _acceptedUpdateKey)) ?? '';
|
|
}
|
|
|
|
Future<void> saveAcceptedUpdateVersion(String version) async {
|
|
_cachedAcceptedUpdate = version;
|
|
await _storage.write(key: _acceptedUpdateKey, value: version);
|
|
}
|
|
|
|
Future<void> save(String phone, String token) async {
|
|
_cachedPhone = phone;
|
|
_cachedToken = token;
|
|
await _storage.write(key: _phoneKey, value: phone);
|
|
await _storage.write(key: _tokenKey, value: token);
|
|
}
|
|
|
|
Future<void> clear() async {
|
|
_cachedPhone = null;
|
|
_cachedToken = null;
|
|
await _storage.delete(key: _phoneKey);
|
|
await _storage.delete(key: _tokenKey);
|
|
}
|
|
}
|