mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
179 lines
5.0 KiB
Dart
179 lines
5.0 KiB
Dart
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}');
|
||
}
|
||
}
|