import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/http/user.dart'; import 'package:pilipala/models/common/theme_type.dart'; import 'package:pilipala/models/user/info.dart'; import 'package:pilipala/models/user/stat.dart'; import 'package:pilipala/utils/storage.dart'; class MineController extends GetxController { // 用户信息 头像、昵称、lv Rx userInfo = UserInfoData().obs; // 用户状态 动态、关注、粉丝 Rx userStat = UserStat().obs; RxBool userLogin = false.obs; Box userInfoCache = GStrorage.userInfo; Box setting = GStrorage.setting; Rx themeType = ThemeType.system.obs; @override onInit() { super.onInit(); if (userInfoCache.get('userInfoCache') != null) { userInfo.value = userInfoCache.get('userInfoCache'); userLogin.value = true; } themeType.value = ThemeType.values[setting.get(SettingBoxKey.themeMode, defaultValue: ThemeType.system.code)]; } onLogin() async { if (!userLogin.value) { Get.toNamed('/loginPage', preventDuplicates: false); } else { int mid = userInfo.value.mid!; String face = userInfo.value.face!; Get.toNamed( '/member?mid=$mid', arguments: {'face': face}, ); } } Future queryUserInfo() async { if (!userLogin.value) { return {'status': false}; } var res = await UserHttp.userInfo(); if (res['status']) { if (res['data'].isLogin) { userInfo.value = res['data']; userInfoCache.put('userInfoCache', res['data']); userLogin.value = true; } else { resetUserInfo(); } } await queryUserStatOwner(); return res; } Future queryUserStatOwner() async { var res = await UserHttp.userStatOwner(); if (res['status']) { userStat.value = res['data']; } return res; } Future resetUserInfo() async { userInfo.value = UserInfoData(); userStat.value = UserStat(); userInfoCache.delete('userInfoCache'); userLogin.value = false; } onChangeTheme() { Brightness currentBrightness = MediaQuery.of(Get.context!).platformBrightness; ThemeType currentTheme = themeType.value; switch (currentTheme) { case ThemeType.dark: setting.put(SettingBoxKey.themeMode, ThemeType.light.code); themeType.value = ThemeType.light; break; case ThemeType.light: setting.put(SettingBoxKey.themeMode, ThemeType.dark.code); themeType.value = ThemeType.dark; break; case ThemeType.system: // 判断当前的颜色模式 if (currentBrightness == Brightness.light) { setting.put(SettingBoxKey.themeMode, ThemeType.dark.code); themeType.value = ThemeType.dark; } else { setting.put(SettingBoxKey.themeMode, ThemeType.light.code); themeType.value = ThemeType.light; } break; } Get.forceAppUpdate(); } pushFollow() { if (!userLogin.value) { SmartDialog.showToast('账号未登录'); return; } Get.toNamed('/follow?mid=${userInfo.value.mid}', preventDuplicates: false); } pushFans() { if (!userLogin.value) { SmartDialog.showToast('账号未登录'); return; } Get.toNamed('/fan?mid=${userInfo.value.mid}', preventDuplicates: false); } pushDynamic() { if (!userLogin.value) { SmartDialog.showToast('账号未登录'); return; } Get.toNamed('/memberDynamics?mid=${userInfo.value.mid}', preventDuplicates: false); } }