refactor: 将前端从 uni-app x 重构为 Flutter
变更内容: - 删除 uni-app x 项目 (app/ 目录) - 新增 Flutter 项目 (flutter_monisuo/ 目录) - 新增部署脚本 (deploy/ 目录) Flutter 项目功能: - 用户登录/注册 - 首页资产概览 - 行情币种列表 - 交易买卖操作 - 资产账户管理 - 充值/提现/划转 - 深色主题 - JWT Token 认证 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
101
flutter_monisuo/lib/core/storage/local_storage.dart
Normal file
101
flutter_monisuo/lib/core/storage/local_storage.dart
Normal file
@@ -0,0 +1,101 @@
|
||||
import 'dart:convert';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// 本地存储服务
|
||||
class LocalStorage {
|
||||
LocalStorage._();
|
||||
|
||||
static const String _tokenKey = 'token';
|
||||
static const String _userInfoKey = 'userInfo';
|
||||
|
||||
static SharedPreferences? _prefs;
|
||||
|
||||
/// 初始化
|
||||
static Future<void> init() async {
|
||||
_prefs = await SharedPreferences.getInstance();
|
||||
}
|
||||
|
||||
/// 获取实例
|
||||
static SharedPreferences get prefs {
|
||||
if (_prefs == null) {
|
||||
throw Exception('LocalStorage not initialized. Call init() first.');
|
||||
}
|
||||
return _prefs!;
|
||||
}
|
||||
|
||||
// ==================== Token 管理 ====================
|
||||
|
||||
/// 保存 Token
|
||||
static Future<void> saveToken(String token) async {
|
||||
await prefs.setString(_tokenKey, token);
|
||||
}
|
||||
|
||||
/// 获取 Token
|
||||
static String? getToken() {
|
||||
return prefs.getString(_tokenKey);
|
||||
}
|
||||
|
||||
/// 移除 Token
|
||||
static Future<void> removeToken() async {
|
||||
await prefs.remove(_tokenKey);
|
||||
}
|
||||
|
||||
/// 是否已登录
|
||||
static bool get isLoggedIn => getToken() != null && getToken()!.isNotEmpty;
|
||||
|
||||
// ==================== 用户信息管理 ====================
|
||||
|
||||
/// 保存用户信息
|
||||
static Future<void> saveUserInfo(Map<String, dynamic> userInfo) async {
|
||||
await prefs.setString(_userInfoKey, jsonEncode(userInfo));
|
||||
}
|
||||
|
||||
/// 获取用户信息
|
||||
static Map<String, dynamic>? getUserInfo() {
|
||||
final str = prefs.getString(_userInfoKey);
|
||||
if (str == null) return null;
|
||||
try {
|
||||
return jsonDecode(str) as Map<String, dynamic>;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// 移除用户信息
|
||||
static Future<void> removeUserInfo() async {
|
||||
await prefs.remove(_userInfoKey);
|
||||
}
|
||||
|
||||
// ==================== 通用方法 ====================
|
||||
|
||||
/// 保存字符串
|
||||
static Future<void> setString(String key, String value) async {
|
||||
await prefs.setString(key, value);
|
||||
}
|
||||
|
||||
/// 获取字符串
|
||||
static String? getString(String key) {
|
||||
return prefs.getString(key);
|
||||
}
|
||||
|
||||
/// 保存布尔值
|
||||
static Future<void> setBool(String key, bool value) async {
|
||||
await prefs.setBool(key, value);
|
||||
}
|
||||
|
||||
/// 获取布尔值
|
||||
static bool? getBool(String key) {
|
||||
return prefs.getBool(key);
|
||||
}
|
||||
|
||||
/// 清除所有数据
|
||||
static Future<void> clearAll() async {
|
||||
await prefs.clear();
|
||||
}
|
||||
|
||||
/// 清除用户数据(退出登录时调用)
|
||||
static Future<void> clearUserData() async {
|
||||
await removeToken();
|
||||
await removeUserInfo();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user