mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
feat: custom main pageview
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -23,7 +23,7 @@ class MainController extends GetxController {
|
||||
final StreamController<bool> bottomBarStream =
|
||||
StreamController<bool>.broadcast();
|
||||
late bool hideTabBar;
|
||||
late TabController controller;
|
||||
late dynamic controller;
|
||||
RxInt selectedIndex = 0.obs;
|
||||
RxBool isLogin = false.obs;
|
||||
|
||||
@@ -39,6 +39,8 @@ class MainController extends GetxController {
|
||||
late final RxString msgUnReadCount = ''.obs;
|
||||
late int lastCheckUnreadAt = 0;
|
||||
|
||||
late final mainTabBarView = GStorage.mainTabBarView;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
@@ -42,11 +42,13 @@ class _MainAppState extends State<MainApp>
|
||||
void initState() {
|
||||
super.initState();
|
||||
_lastSelectTime = DateTime.now().millisecondsSinceEpoch;
|
||||
_mainController.controller = TabController(
|
||||
vsync: this,
|
||||
initialIndex: _mainController.selectedIndex.value,
|
||||
length: _mainController.navigationBars.length,
|
||||
);
|
||||
_mainController.controller = _mainController.mainTabBarView
|
||||
? TabController(
|
||||
vsync: this,
|
||||
initialIndex: _mainController.selectedIndex.value,
|
||||
length: _mainController.navigationBars.length,
|
||||
)
|
||||
: PageController(initialPage: _mainController.selectedIndex.value);
|
||||
enableMYBar =
|
||||
GStorage.setting.get(SettingBoxKey.enableMYBar, defaultValue: true);
|
||||
useSideBar =
|
||||
@@ -114,7 +116,11 @@ class _MainAppState extends State<MainApp>
|
||||
|
||||
if (value != _mainController.selectedIndex.value) {
|
||||
_mainController.selectedIndex.value = value;
|
||||
_mainController.controller.animateTo(value);
|
||||
if (_mainController.mainTabBarView) {
|
||||
_mainController.controller.animateTo(value);
|
||||
} else {
|
||||
_mainController.controller.jumpToPage(value);
|
||||
}
|
||||
dynamic currentPage = _mainController.pages[value];
|
||||
if (currentPage is HomePage) {
|
||||
_checkDefaultSearch();
|
||||
@@ -217,14 +223,21 @@ class _MainAppState extends State<MainApp>
|
||||
color: Theme.of(context).colorScheme.outline.withOpacity(0.06),
|
||||
),
|
||||
Expanded(
|
||||
child: CustomTabBarView(
|
||||
scrollDirection: context.orientation == Orientation.portrait
|
||||
? Axis.horizontal
|
||||
: Axis.vertical,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
controller: _mainController.controller,
|
||||
children: _mainController.pages,
|
||||
),
|
||||
child: _mainController.mainTabBarView
|
||||
? CustomTabBarView(
|
||||
scrollDirection:
|
||||
context.orientation == Orientation.portrait
|
||||
? Axis.horizontal
|
||||
: Axis.vertical,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
controller: _mainController.controller,
|
||||
children: _mainController.pages,
|
||||
)
|
||||
: PageView(
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
controller: _mainController.controller,
|
||||
children: _mainController.pages,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -1895,6 +1895,14 @@ List<SettingsModel> get extraSettings => [
|
||||
setKey: SettingBoxKey.preInitPlayer,
|
||||
defaultVal: false,
|
||||
),
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.sw1tch,
|
||||
title: '首页切换页面动画',
|
||||
leading: Icon(Icons.home_outlined),
|
||||
setKey: SettingBoxKey.mainTabBarView,
|
||||
defaultVal: false,
|
||||
needReboot: true,
|
||||
),
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.sw1tch,
|
||||
enableFeedback: true,
|
||||
|
||||
@@ -345,6 +345,9 @@ class GStorage {
|
||||
static bool get preInitPlayer =>
|
||||
GStorage.setting.get(SettingBoxKey.preInitPlayer, defaultValue: false);
|
||||
|
||||
static bool get mainTabBarView =>
|
||||
GStorage.setting.get(SettingBoxKey.mainTabBarView, defaultValue: false);
|
||||
|
||||
static List<double> get dynamicDetailRatio => List<double>.from(setting
|
||||
.get(SettingBoxKey.dynamicDetailRatio, defaultValue: [60.0, 40.0]));
|
||||
|
||||
@@ -569,6 +572,7 @@ class SettingBoxKey {
|
||||
audioNormalization = 'audioNormalization',
|
||||
superResolutionType = 'superResolutionType',
|
||||
preInitPlayer = 'preInitPlayer',
|
||||
mainTabBarView = 'mainTabBarView',
|
||||
|
||||
// Sponsor Block
|
||||
enableSponsorBlock = 'enableSponsorBlock',
|
||||
|
||||
Reference in New Issue
Block a user