Files
PiliPlus/lib/pages/home/controller.dart
bggRGjQaUbCoE c01e2c0b8c fix: home tab
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2024-11-27 13:36:12 +08:00

118 lines
3.3 KiB
Dart

import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:PiliPalaX/models/common/tab_type.dart';
import 'package:PiliPalaX/utils/storage.dart';
import '../../http/index.dart';
import '../../utils/feed_back.dart';
import '../mine/view.dart';
class HomeController extends GetxController with GetTickerProviderStateMixin {
bool flag = true;
late RxList tabs = [].obs;
late TabController tabController;
late List tabsCtrList;
late List<Widget> tabsPageList;
Box userInfoCache = GStorage.userInfo;
Box settingStorage = GStorage.setting;
RxBool userLogin = false.obs;
RxString userFace = ''.obs;
dynamic userInfo;
Box setting = GStorage.setting;
late final StreamController<bool> searchBarStream =
StreamController<bool>.broadcast();
late bool hideSearchBar;
late List defaultTabs;
late List<String> tabbarSort;
RxString defaultSearch = ''.obs;
late bool useSideBar;
@override
void onInit() {
super.onInit();
userInfo = userInfoCache.get('userInfoCache');
userLogin.value = userInfo != null;
userFace.value = userInfo != null ? userInfo.face : '';
hideSearchBar =
setting.get(SettingBoxKey.hideSearchBar, defaultValue: true);
if (setting.get(SettingBoxKey.enableSearchWord, defaultValue: true)) {
searchDefault();
}
useSideBar = setting.get(SettingBoxKey.useSideBar, defaultValue: false);
// 进行tabs配置
setTabConfig();
}
void onRefresh() {
int index = tabController.index;
var ctr = tabsCtrList[index];
ctr().onRefresh();
}
void animateToTop() {
int index = tabController.index;
var ctr = tabsCtrList[index];
ctr().animateToTop();
}
// 更新登录状态
void updateLoginStatus(val) async {
userInfo = await userInfoCache.get('userInfoCache');
userLogin.value = val ?? false;
if (val) return;
userFace.value = userInfo != null ? userInfo.face : '';
}
void setTabConfig() async {
defaultTabs = [...tabsConfig];
tabbarSort = settingStorage
.get(SettingBoxKey.tabbarSort,
defaultValue: ['live', 'rcmd', 'hot', 'rank', 'bangumi'])
.map<String>((i) => i.toString())
.toList();
defaultTabs.retainWhere(
(item) => tabbarSort.contains((item['type'] as TabType).id));
defaultTabs.sort((a, b) => tabbarSort
.indexOf((a['type'] as TabType).id)
.compareTo(tabbarSort.indexOf((b['type'] as TabType).id)));
tabs.value = defaultTabs;
tabsCtrList = tabs.map((e) => e['ctr']).toList();
tabsPageList = tabs.map<Widget>((e) => e['page']).toList();
tabController = TabController(
initialIndex: max(0, tabbarSort.indexOf(TabType.rcmd.id)),
length: tabs.length,
vsync: this,
);
}
@override
void dispose() {
tabController.animation!.removeListener(() {});
tabController.dispose();
super.dispose();
}
void searchDefault() async {
var res = await Request().get(Api.searchDefault);
if (res.data['code'] == 0) {
defaultSearch.value = res.data['data']['name'];
}
}
showUserInfoDialog(context) {
feedBack();
showDialog(
context: context,
useSafeArea: true,
builder: (_) => const Dialog(
child: MinePage(),
));
}
}