import 'package:get_storage/get_storage.dart'; import '../../../core/utils/logger.dart'; class User { // 单例实例 static User? _instance; /// 安全地检查用户是否已经登录(即单例是否已初始化) static bool isLoggedIn() { return _instance != null; } // 单例访问器(增加空安全保护) static User get instance { if (_instance == null) { throw Exception("User must be initialized first"); } return _instance!; } // --- 新增 --- /// 清理所有与用户会话相关的数据 static Future clearUserSession() async { final GetStorage storage = GetStorage(); // 1. 清理本地存储 await storage.remove('logintoken'); await storage.remove('user_info'); // 2. 清理内存中的单例 _instance = null; Logger.i("User", "用户会话数据已安全清理。"); } // 最终属性(不可变) String name; String uid; String avatar; String language; String token; String mail; String phone; String phonemac; String password; int viplv = 0; //添加会员等级字段,0表示普通用户 List devices; // 私有构造函数 User._({ required this.name, required this.uid, required this.avatar, required this.language, required this.token, required this.mail, required this.phone, required this.phonemac, required this.password, required this.viplv, required this.devices, }); factory User.fromJson(Map json) { // 修复1:安全获取嵌套的 user 字段 final userData = json['user'] as Map?; // 允许空值 final devicesData = json['devices'] as List?; // 允许空值 //final token = json['data']['token'] as String? ?? ''; //final token = ''; // 更新单例实例 return _instance = User._( token: '', //token: token as String? ?? '', name: (userData?['name'] as String?) ?? '默认名称', // 提供默认值 uid: (userData?['uid'] as String?) ?? '', avatar: (userData?['avatar'] as String?) ?? '', language: (userData?['language'] as String?) ?? 'en', mail: (userData?['mail'] as String?) ?? '', phone: (userData?['phone'] as String?) ?? '', phonemac: (userData?['phonemac'] as String?) ?? '', password: (userData?['password'] as String?) ?? '', viplv: (userData?['viplv'] as int?) ?? 0, // 提供默认值 devices: devicesData ?.map((e) => UserDevice.fromJson(e as Map)) .toList() ?? [], // 处理设备列表 ); } factory User.fronTokenJson(Map json) { // 修复1:安全获取嵌套的 user 字段 final userData = json['user'] as Map?; // 允许空值 final devicesData = json['devices'] as List?; // 允许空值 print("数据获取fronTokenJson$userData $devicesData"); // 更新单例实例 return _instance = User._( token: '', name: (userData?['name'] as String?) ?? '默认名称', // 提供默认值 uid: (userData?['uid'] as String?) ?? '', avatar: (userData?['avatar'] as String?) ?? '', language: (userData?['language'] as String?) ?? 'en', mail: (userData?['mail'] as String?) ?? '', phone: (userData?['phone'] as String?) ?? '', phonemac: (userData?['phonemac'] as String?) ?? '', password: (userData?['password'] as String?) ?? '', viplv: (userData?['viplv'] as int?) ?? 0, // 提供默认值 devices: devicesData != null ? (devicesData) .map((e) => UserDevice.fromJson(e as Map)) .toList() : [], // 处理设备列表 ); } // 完整的JSON序列化 Map toJson() => { 'user': { 'name': name, 'uid': uid, 'avatar': avatar, 'language': language, 'token': token, 'mail': mail, 'phone': phone, 'phonemac': phonemac, 'password': password, 'viplv': viplv, 'devices': devices.map((device) => device.toJson()).toList(), }, }; // 添加设备 addUserDevice(UserDevice device) { devices.add(device); } // 查找设备 removeUserDevice(int id) { devices.removeWhere((device) => device.id == id); } } class UserDevice { int id; String uid; int devicetype; String devicename; String devicemac; String license; UserDevice({ required this.id, required this.uid, required this.devicetype, required this.devicename, required this.devicemac, required this.license, }); factory UserDevice.fromJson(Map json) => UserDevice( id: json['id'] as int, uid: json['uid'] as String, devicetype: (json['devicetype'] as num).toInt(), devicename: json['devicename'] as String, devicemac: json['devicemac'] as String, license: json['license'] as String, ); toJson() => { 'id': id, 'uid': uid, 'devicetype': devicetype, 'devicename': devicename, 'devicemac': devicemac, 'license': license, }; }