Files
PiliPlus/lib/pages/home/controller.dart
My-Responsitories 5f8313901b tweaks (#1142)
* opt: unused layout

* mod: semantics

* opt: DanmakuMsg type

* opt: avoid cast

* opt: unnecessary_lambdas

* opt: use isEven

* opt: logger

* opt: invalid common page

* tweak

* opt: unify DynController
2025-08-27 12:01:53 +08:00

96 lines
2.5 KiB
Dart

import 'dart:async';
import 'dart:math';
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/models/common/home_tab_type.dart';
import 'package:PiliPlus/pages/common/common_controller.dart';
import 'package:PiliPlus/services/account_service.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class HomeController extends GetxController
with GetSingleTickerProviderStateMixin, ScrollOrRefreshMixin {
late List<HomeTabType> tabs;
late TabController tabController;
StreamController<bool>? searchBarStream;
final bool hideSearchBar = Pref.hideSearchBar;
final bool useSideBar = Pref.useSideBar;
bool enableSearchWord = Pref.enableSearchWord;
late RxString defaultSearch = ''.obs;
late int lateCheckSearchAt = 0;
ScrollOrRefreshMixin get controller => tabs[tabController.index].ctr();
@override
ScrollController get scrollController => controller.scrollController;
AccountService accountService = Get.find<AccountService>();
@override
void onInit() {
super.onInit();
if (hideSearchBar) {
searchBarStream = StreamController<bool>.broadcast();
}
if (enableSearchWord) {
lateCheckSearchAt = DateTime.now().millisecondsSinceEpoch;
querySearchDefault();
}
setTabConfig();
}
@override
Future<void> onRefresh() {
return controller.onRefresh().catchError((e) {
if (kDebugMode) debugPrint(e.toString());
});
}
void setTabConfig() {
final tabs = GStorage.setting.get(SettingBoxKey.tabBarSort) as List?;
if (tabs != null) {
this.tabs = tabs.map((i) => HomeTabType.values[i]).toList();
} else {
this.tabs = HomeTabType.values;
}
tabController = TabController(
initialIndex: max(0, this.tabs.indexOf(HomeTabType.rcmd)),
length: this.tabs.length,
vsync: this,
);
}
@override
void dispose() {
tabController.dispose();
super.dispose();
}
Future<void> querySearchDefault() async {
try {
var res = await Request().get(Api.searchDefault);
if (res.data['code'] == 0) {
defaultSearch.value = res.data['data']?['name'] ?? '';
// defaultSearch.value = res.data['data']?['show_name'] ?? '';
}
} catch (_) {}
}
@override
void onClose() {
searchBarStream?.close();
super.onClose();
}
}