import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; import 'package:isekai_wiki/global.dart'; import 'package:json_annotation/json_annotation.dart'; part 'user.g.dart'; @JsonSerializable() class UserInfo { int userId; String userName; String? nickName; String? avatarUrl; UserInfo({required this.userId, required this.userName, this.nickName, this.avatarUrl}); factory UserInfo.fromJson(Map json) => _$UserInfoFromJson(json); Map toJson() => _$UserInfoToJson(this); } class UserController extends GetxController { bool _ignoreSave = false; var loginRequestToken = "".obs; var userId = 0.obs; var userName = "".obs; var nickName = "".obs; var avatarUrl = "".obs; bool get isLoggedIn { return userId.value > 0; } String get getDisplayName { return nickName.isNotEmpty ? nickName.string : userName.string; } @override void onInit() async { super.onInit(); loadFromStorage(); ever(loginRequestToken, (String token) { saveToStorage(); }); } /// 更新用户资料,并检测登录状态 Future updateProfile() async {} /// 从本地存储读取 void loadFromStorage() { try { final prefs = Global.sharedPreferences!; var userInfoJson = prefs.getString("userInfo"); if (userInfoJson == null) return; var userInfoObject = jsonDecode(userInfoJson); if (userInfoObject == null) return; var userInfo = UserInfo.fromJson(userInfoObject); _ignoreSave = true; userId.value = userInfo.userId; userName.value = userInfo.userName; nickName.value = userInfo.nickName ?? ""; avatarUrl.value = userInfo.avatarUrl ?? ""; _ignoreSave = false; var savedLoginRequestToken = prefs.getString("loginRequestToken"); if (savedLoginRequestToken != null) { _ignoreSave = true; loginRequestToken.value = savedLoginRequestToken; _ignoreSave = false; } } catch (ex) { if (kDebugMode) { print(ex); } } finally { _ignoreSave = false; } } /// 保存到本地存储 void saveToStorage() { if (_ignoreSave) return; final prefs = Global.sharedPreferences!; var userInfo = UserInfo( userId: userId.value, userName: userName.value, nickName: nickName.isNotEmpty ? nickName.value : null, avatarUrl: avatarUrl.isNotEmpty ? avatarUrl.value : null, ); var userInfoJson = jsonEncode(userInfo.toJson()); prefs.setString("userInfo", userInfoJson); if (loginRequestToken.isNotEmpty) { prefs.setString("loginRequestToken", loginRequestToken.value); } else if (prefs.containsKey("loginRequestToken")) { prefs.remove("loginRequestToken"); } } /// 开始登录流程 /// 从服务器获取loginRequestToken Future startAuthFlow() async { return false; } // 尝试通过登录请求Token完成登录 Future attemptFinishAuth() async { if (loginRequestToken.isEmpty) return; } }