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; static bool anonymity = false; @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( '/webview', parameters: { 'url': 'https://passport.bilibili.com/h5-app/passport/login', 'type': 'login', 'pageTitle': '登录bilibili', }, ); // Get.toNamed('/loginPage'); } 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(); } } 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; anonymity = false; } static onChangeAnonymity(BuildContext context) { anonymity = !anonymity; if (anonymity) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: const Text('\n已进入无痕模式\n\n' '* 搜索、观看视频或直播均不携带Cookie与CSRF,' '不产生查询或播放记录\n' '点赞等其它操作不受影响\n\n' '仅本次启动有效,可随时退出\n\n' '*可在隐私设置了解更多'), duration: const Duration(seconds: 1), action: SnackBarAction( label: '设为永久', onPressed: () { SmartDialog.showToast('暂不支持'); }, ), showCloseIcon: true, ), ); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('【已退出无痕模式】'), duration: Duration(seconds: 1), // action: SnackBarAction( // label: '确认', // onPressed: () {}, // ), showCloseIcon: true, ), ); } } 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}'); } pushFans() { if (!userLogin.value) { SmartDialog.showToast('账号未登录'); return; } Get.toNamed('/fan?mid=${userInfo.value.mid}'); } pushDynamic() { if (!userLogin.value) { SmartDialog.showToast('账号未登录'); return; } Get.toNamed('/memberDynamics?mid=${userInfo.value.mid}'); } }