From 5c6be9cdcd6ddadaa583e1600bdcf4ad67612152 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Mon, 20 Jan 2025 11:12:02 +0800 Subject: [PATCH] feat: custom main pageview Signed-off-by: bggRGjQaUbCoE --- lib/pages/main/controller.dart | 4 ++- lib/pages/main/view.dart | 41 ++++++++++++++++++---------- lib/pages/setting/widgets/model.dart | 8 ++++++ lib/utils/storage.dart | 4 +++ 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 10fbe999..a02228d8 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -23,7 +23,7 @@ class MainController extends GetxController { final StreamController bottomBarStream = StreamController.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(); diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index 9f7726f1..f03d45f1 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -42,11 +42,13 @@ class _MainAppState extends State 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 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 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, + ), ), ], ), diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index 78e98838..29ddc2ed 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -1895,6 +1895,14 @@ List 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, diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index ec6ea400..8a7fa73c 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -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 get dynamicDetailRatio => List.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',