first commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// 本地存储封装:token / userInfo / 记住密码
|
||||
/// (对齐 uniApp 的 uni.setStorageSync / getStorageSync 用法)
|
||||
class LocalStorage {
|
||||
LocalStorage._();
|
||||
|
||||
static final LocalStorage instance = LocalStorage._();
|
||||
|
||||
SharedPreferences? _prefs;
|
||||
|
||||
/// App 启动时调用一次,确保后续同步读取可用
|
||||
Future<void> init() async {
|
||||
_prefs ??= await SharedPreferences.getInstance();
|
||||
}
|
||||
|
||||
Future<SharedPreferences> _getPrefs() async {
|
||||
return _prefs ??= await SharedPreferences.getInstance();
|
||||
}
|
||||
|
||||
// ---- 认证 ----
|
||||
static const _keyToken = 'token';
|
||||
static const _keyUserInfo = 'userInfo';
|
||||
|
||||
Future<void> setAuth({required String token, required Map<String, dynamic> userInfo}) async {
|
||||
final prefs = await _getPrefs();
|
||||
await prefs.setString(_keyToken, token);
|
||||
await prefs.setString(_keyUserInfo, jsonEncode(userInfo));
|
||||
}
|
||||
|
||||
Future<void> clearAuth() async {
|
||||
final prefs = await _getPrefs();
|
||||
await prefs.remove(_keyToken);
|
||||
await prefs.remove(_keyUserInfo);
|
||||
}
|
||||
|
||||
String? getToken() => _prefs?.getString(_keyToken);
|
||||
|
||||
Map<String, dynamic>? getUserInfo() {
|
||||
final raw = _prefs?.getString(_keyUserInfo);
|
||||
if (raw == null) return null;
|
||||
try {
|
||||
return jsonDecode(raw) as Map<String, dynamic>;
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- 记住密码 ----
|
||||
static const _keySavedUsername = 'saved_username';
|
||||
static const _keySavedPassword = 'saved_password';
|
||||
|
||||
Future<void> saveRememberedPassword(String username, String encryptedPassword) async {
|
||||
final prefs = await _getPrefs();
|
||||
await prefs.setString(_keySavedUsername, username);
|
||||
await prefs.setString(_keySavedPassword, encryptedPassword);
|
||||
}
|
||||
|
||||
Future<void> clearRememberedPassword() async {
|
||||
final prefs = await _getPrefs();
|
||||
await prefs.remove(_keySavedUsername);
|
||||
await prefs.remove(_keySavedPassword);
|
||||
}
|
||||
|
||||
({String username, String password})? getRememberedAccount() {
|
||||
final username = _prefs?.getString(_keySavedUsername);
|
||||
final password = _prefs?.getString(_keySavedPassword);
|
||||
if (username == null || password == null) return null;
|
||||
return (username: username, password: password);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user