Files
PiliPlus/lib/pages/mine/controller.dart
2024-01-23 20:13:51 +08:00

179 lines
5.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<UserInfoData> userInfo = UserInfoData().obs;
// 用户状态 动态、关注、粉丝
Rx<UserStat> userStat = UserStat().obs;
RxBool userLogin = false.obs;
Box userInfoCache = GStrorage.userInfo;
Box setting = GStrorage.setting;
Rx<ThemeType> 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}');
}
}