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 readToken() async { if (_cachedToken != null) return _cachedToken; return _cachedToken = await _storage.read(key: _tokenKey); } Future readPhone() async { if (_cachedPhone != null) return _cachedPhone; return _cachedPhone = await _storage.read(key: _phoneKey); } /// 用户点过「立即更新」的服务器版本号(空串 = 从未接受过更新提示) Future readAcceptedUpdateVersion() async { if (_cachedAcceptedUpdate != null) return _cachedAcceptedUpdate!; return _cachedAcceptedUpdate = (await _storage.read(key: _acceptedUpdateKey)) ?? ''; } Future saveAcceptedUpdateVersion(String version) async { _cachedAcceptedUpdate = version; await _storage.write(key: _acceptedUpdateKey, value: version); } Future 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 clear() async { _cachedPhone = null; _cachedToken = null; await _storage.delete(key: _phoneKey); await _storage.delete(key: _tokenKey); } }