From 8dc9f6858472fe80957d799bbcd45eb1aa9c62b3 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Thu, 17 Apr 2025 16:27:05 +0800 Subject: [PATCH] opt: search reload Signed-off-by: bggRGjQaUbCoE --- lib/pages/search_panel/controller.dart | 14 +++++++++++++- lib/pages/search_panel/view.dart | 1 + lib/pages/search_result/controller.dart | 8 ++++++++ lib/pages/search_result/view.dart | 9 +++++---- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/pages/search_panel/controller.dart b/lib/pages/search_panel/controller.dart index 1f0842a0..7c3e74bc 100644 --- a/lib/pages/search_panel/controller.dart +++ b/lib/pages/search_panel/controller.dart @@ -2,6 +2,7 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/search/result.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/search_result/controller.dart'; +import 'package:PiliPlus/utils/extension.dart'; import 'package:get/get.dart'; import 'package:PiliPlus/http/search.dart'; import 'package:PiliPlus/models/common/search_type.dart'; @@ -33,7 +34,12 @@ class SearchPanelController, T> void onInit() { super.onInit(); try { - searchResultController = Get.find(tag: tag); + searchResultController = Get.find(tag: tag) + ..toTopIndex.listen((index) { + if (index == searchType.index) { + scrollController.animToTop(); + } + }); } catch (_) {} queryData(); } @@ -64,4 +70,10 @@ class SearchPanelController, T> pubBegin: pubBegin, pubEnd: pubEnd, ); + + @override + Future onReload() { + scrollController.jumpToTop(); + return super.onReload(); + } } diff --git a/lib/pages/search_panel/view.dart b/lib/pages/search_panel/view.dart index d4e144de..2ef6af16 100644 --- a/lib/pages/search_panel/view.dart +++ b/lib/pages/search_panel/view.dart @@ -46,6 +46,7 @@ abstract class CommonSearchPanelState< child: SafeArea( bottom: false, child: CustomScrollView( + controller: controller.scrollController, physics: const AlwaysScrollableScrollPhysics(), slivers: [ if (widget.hasHeader) diff --git a/lib/pages/search_result/controller.dart b/lib/pages/search_result/controller.dart index 104330c7..e47b75ea 100644 --- a/lib/pages/search_result/controller.dart +++ b/lib/pages/search_result/controller.dart @@ -6,4 +6,12 @@ class SearchResultController extends GetxController { RxList count = List.generate(SearchType.values.length, (_) => -1).toList().obs; + + RxInt toTopIndex = (-1).obs; + + @override + void onClose() { + toTopIndex.close(); + super.onClose(); + } } diff --git a/lib/pages/search_result/view.dart b/lib/pages/search_result/view.dart index 0d7ec9eb..07d005ed 100644 --- a/lib/pages/search_result/view.dart +++ b/lib/pages/search_result/view.dart @@ -1,6 +1,5 @@ import 'package:PiliPlus/pages/search/controller.dart'; import 'package:PiliPlus/pages/search_panel/article/view.dart'; -import 'package:PiliPlus/pages/search_panel/controller.dart'; import 'package:PiliPlus/pages/search_panel/live/view.dart'; import 'package:PiliPlus/pages/search_panel/pgc/view.dart'; import 'package:PiliPlus/pages/search_panel/user/view.dart'; @@ -133,9 +132,11 @@ class _SearchResultPageState extends State tabAlignment: TabAlignment.start, onTap: (index) { if (_tabController.indexIsChanging.not) { - Get.find( - tag: SearchType.values[index].name + _tag) - .animateToTop(); + if (_searchResultController.toTopIndex.value == index) { + _searchResultController.toTopIndex.refresh(); + } else { + _searchResultController.toTopIndex.value = index; + } } }, ),