diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index c3b18334..3891afe3 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -29,7 +29,6 @@ class DynamicsController extends GetxController late TabController tabController; RxList tempBannedList = [].obs; late List tabsPageList; - bool flag = false; RxInt initialValue = 0.obs; RxBool userLogin = false.obs; dynamic userInfo; diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index d261a019..1421702a 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -10,7 +10,6 @@ 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; diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 1a87fbaf..6f76eb7b 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -23,7 +23,7 @@ class MainController extends GetxController { StreamController.broadcast(); late bool hideTabBar; late PageController pageController; - int selectedIndex = 0; + RxInt selectedIndex = 0.obs; RxBool isLogin = false.obs; late DynamicBadgeMode dynamicBadgeMode; @@ -203,7 +203,7 @@ class MainController extends GetxController { int defaultIndex = navigationBars.indexWhere((item) => item['id'] == defaultHomePage); // 如果找不到匹配项,默认索引设置为0或其他合适的值 - selectedIndex = defaultIndex != -1 ? defaultIndex : 0; + selectedIndex.value = defaultIndex != -1 ? defaultIndex : 0; pages = navigationBars .map((e) => switch (e['id']) { 0 => const HomePage(), diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index 9c558ab7..a99da5f9 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -33,7 +33,7 @@ class _MainAppState extends State late final _homeController = Get.put(HomeController()); late final _dynamicController = Get.put(DynamicsController()); - int? _lastSelectTime; //上次点击时间 + late int _lastSelectTime = 0; //上次点击时间 late bool enableMYBar; late bool useSideBar; @@ -42,7 +42,7 @@ class _MainAppState extends State super.initState(); _lastSelectTime = DateTime.now().millisecondsSinceEpoch; _mainController.pageController = - PageController(initialPage: _mainController.selectedIndex); + PageController(initialPage: _mainController.selectedIndex.value); enableMYBar = GStorage.setting.get(SettingBoxKey.enableMYBar, defaultValue: true); useSideBar = @@ -76,7 +76,8 @@ class _MainAppState extends State void _checkDefaultSearch([bool shouldCheck = false]) { if (_mainController.homeIndex != -1 && _homeController.enableSearchWord) { if (shouldCheck && - _mainController.pages[_mainController.selectedIndex] is! HomePage) { + _mainController.pages[_mainController.selectedIndex.value] + is! HomePage) { return; } int now = DateTime.now().millisecondsSinceEpoch; @@ -92,7 +93,8 @@ class _MainAppState extends State _mainController.homeIndex != -1 && _mainController.msgBadgeMode != DynamicBadgeMode.hidden) { if (shouldCheck && - _mainController.pages[_mainController.selectedIndex] is! HomePage) { + _mainController.pages[_mainController.selectedIndex.value] + is! HomePage) { return; } int now = DateTime.now().millisecondsSinceEpoch; @@ -105,39 +107,35 @@ class _MainAppState extends State void setIndex(int value) async { feedBack(); - _mainController.pageController.jumpToPage(value); - var currentPage = _mainController.pages[value]; - if (currentPage is HomePage) { - if (_homeController.flag) { - // 单击返回顶部 双击并刷新 - if (DateTime.now().millisecondsSinceEpoch - _lastSelectTime! < 500) { - _homeController.onRefresh(); - } else { - _homeController.animateToTop(); - } - _lastSelectTime = DateTime.now().millisecondsSinceEpoch; - } - _homeController.flag = true; - _checkDefaultSearch(); - _checkUnread(); - } else { - _homeController.flag = false; - } - if (currentPage is DynamicsPage) { - if (_dynamicController.flag) { - // 单击返回顶部 双击并刷新 - if (DateTime.now().millisecondsSinceEpoch - _lastSelectTime! < 500) { - _dynamicController.onRefresh(); - } else { - _dynamicController.animateToTop(); - } - _lastSelectTime = DateTime.now().millisecondsSinceEpoch; + if (value != _mainController.selectedIndex.value) { + _mainController.selectedIndex.value = value; + _mainController.pageController.jumpToPage(value); + dynamic currentPage = _mainController.pages[value]; + if (currentPage is HomePage) { + _checkDefaultSearch(); + _checkUnread(); + } else if (currentPage is DynamicsPage) { + _mainController.setCount(); } - _dynamicController.flag = true; - _mainController.setCount(); } else { - _dynamicController.flag = false; + dynamic currentPage = _mainController.pages[value]; + + if (currentPage is HomePage) { + _homeController.animateToTop(); + } else if (currentPage is DynamicsPage) { + _dynamicController.animateToTop(); + } + + int now = DateTime.now().millisecondsSinceEpoch; + if (now - _lastSelectTime < 500) { + if (currentPage is HomePage) { + _homeController.onRefresh(); + } else if (currentPage is DynamicsPage) { + _dynamicController.onRefresh(); + } + } + _lastSelectTime = now; } } @@ -156,7 +154,7 @@ class _MainAppState extends State return PopScope( canPop: false, onPopInvokedWithResult: (bool didPop, Object? result) async { - if (_mainController.selectedIndex != 0) { + if (_mainController.selectedIndex.value != 0) { setIndex(0); _mainController.bottomBarStream.add(true); } else { @@ -188,7 +186,8 @@ class _MainAppState extends State groupAlignment: 1, minWidth: context.width * 0.0286 + 28.56, backgroundColor: Colors.transparent, - selectedIndex: _mainController.selectedIndex, + selectedIndex: + _mainController.selectedIndex.value, onDestinationSelected: setIndex, labelType: NavigationRailLabelType.none, leading: userAndSearchVertical, @@ -226,7 +225,7 @@ class _MainAppState extends State () => _mainController.navigationBars.length > 1 ? NavigationRail( onDestinationSelected: setIndex, - selectedIndex: _mainController.selectedIndex, + selectedIndex: _mainController.selectedIndex.value, destinations: _mainController.navigationBars .map( (e) => NavigationRailDestination( @@ -258,10 +257,6 @@ class _MainAppState extends State child: PageView( physics: const NeverScrollableScrollPhysics(), controller: _mainController.pageController, - onPageChanged: (index) { - _mainController.selectedIndex = index; - setState(() {}); - }, children: _mainController.pages, ), ), @@ -286,7 +281,7 @@ class _MainAppState extends State ? NavigationBar( onDestinationSelected: setIndex, selectedIndex: - _mainController.selectedIndex, + _mainController.selectedIndex.value, destinations: _mainController.navigationBars.map( (e) { @@ -312,7 +307,7 @@ class _MainAppState extends State () => _mainController.navigationBars.length > 1 ? BottomNavigationBar( currentIndex: - _mainController.selectedIndex, + _mainController.selectedIndex.value, onTap: setIndex, iconSize: 16, selectedFontSize: 12,