From 0ef85f25518361f6226b00a31316104db6a5da6d Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Mon, 24 Feb 2025 21:04:25 +0800 Subject: [PATCH] fix: search ctr related #306 Signed-off-by: bggRGjQaUbCoE --- lib/pages/search_panel/view.dart | 2 +- .../search_panel/widgets/article_panel.dart | 13 ++++--- .../search_panel/widgets/user_panel.dart | 13 ++++--- .../search_panel/widgets/video_panel.dart | 34 ++++++++++++------- lib/pages/search_result/view.dart | 9 +++-- 5 files changed, 46 insertions(+), 25 deletions(-) diff --git a/lib/pages/search_panel/view.dart b/lib/pages/search_panel/view.dart index d1c83f8d..7b06f220 100644 --- a/lib/pages/search_panel/view.dart +++ b/lib/pages/search_panel/view.dart @@ -46,7 +46,7 @@ class _SearchPanelState extends State searchType: widget.searchType, tag: widget.tag, ), - tag: widget.searchType.name + widget.keyword, + tag: widget.searchType.name + widget.tag, ); } diff --git a/lib/pages/search_panel/widgets/article_panel.dart b/lib/pages/search_panel/widgets/article_panel.dart index 05c0f26f..602e868e 100644 --- a/lib/pages/search_panel/widgets/article_panel.dart +++ b/lib/pages/search_panel/widgets/article_panel.dart @@ -14,11 +14,12 @@ import 'package:PiliPlus/utils/utils.dart'; import '../../../utils/grid.dart'; -Widget searchArticlePanel(context, searchPanelCtr, LoadingState loadingState) { +Widget searchArticlePanel(BuildContext context, + SearchPanelController searchPanelCtr, LoadingState loadingState) { TextStyle textStyle = TextStyle( fontSize: Theme.of(context).textTheme.labelSmall!.fontSize, color: Theme.of(context).colorScheme.outline); - final ctr = Get.put(ArticlePanelController()); + final ctr = Get.put(ArticlePanelController(), tag: searchPanelCtr.tag); return CustomScrollView( controller: searchPanelCtr.scrollController, @@ -288,7 +289,9 @@ class ArticlePanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'article${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); ctr.order.value = item['order']; SmartDialog.showLoading(msg: 'loading'); await ctr.onReload(); @@ -321,7 +324,9 @@ class ArticlePanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'article${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); ctr.categoryId = item['categoryId']; SmartDialog.showLoading(msg: 'loading'); await ctr.onReload(); diff --git a/lib/pages/search_panel/widgets/user_panel.dart b/lib/pages/search_panel/widgets/user_panel.dart index 38c83a82..74d161b4 100644 --- a/lib/pages/search_panel/widgets/user_panel.dart +++ b/lib/pages/search_panel/widgets/user_panel.dart @@ -12,11 +12,12 @@ import 'package:PiliPlus/utils/utils.dart'; import '../../../utils/grid.dart'; -Widget searchUserPanel(context, searchPanelCtr, LoadingState loadingState) { +Widget searchUserPanel(BuildContext context, + SearchPanelController searchPanelCtr, LoadingState loadingState) { TextStyle style = TextStyle( fontSize: Theme.of(context).textTheme.labelSmall!.fontSize, color: Theme.of(context).colorScheme.outline); - final ctr = Get.put(UserPanelController()); + final ctr = Get.put(UserPanelController(), tag: searchPanelCtr.tag); return CustomScrollView( controller: searchPanelCtr.scrollController, @@ -213,7 +214,9 @@ class UserPanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'bili_user${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); ctr.orderSort = item['orderSort']; ctr.order.value = item['order']; SmartDialog.showLoading(msg: 'loading'); @@ -247,7 +250,9 @@ class UserPanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'bili_user${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); ctr.userType = item['userType']; SmartDialog.showLoading(msg: 'loading'); await ctr.onReload(); diff --git a/lib/pages/search_panel/widgets/video_panel.dart b/lib/pages/search_panel/widgets/video_panel.dart index 9bce3552..44f8cb82 100644 --- a/lib/pages/search_panel/widgets/video_panel.dart +++ b/lib/pages/search_panel/widgets/video_panel.dart @@ -14,10 +14,11 @@ import 'package:intl/intl.dart'; import '../../../common/constants.dart'; import '../../../utils/grid.dart'; -Widget searchVideoPanel(context, ctr, LoadingState loadingState) { - final controller = Get.put(VideoPanelController()); +Widget searchVideoPanel(BuildContext context, + SearchPanelController searchPanelCtr, LoadingState loadingState) { + final controller = Get.put(VideoPanelController(), tag: searchPanelCtr.tag); return CustomScrollView( - controller: ctr.scrollController, + controller: searchPanelCtr.scrollController, slivers: [ SliverPersistentHeader( pinned: false, @@ -48,10 +49,10 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) { : Theme.of(context).colorScheme.outline, onTap: (value) async { controller.selectedType.value = i['type']; - ctr.order.value = + searchPanelCtr.order.value = i['type'].toString().split('.').last; SmartDialog.showLoading(msg: 'loading'); - await ctr.onReload(); + await searchPanelCtr.onReload(); SmartDialog.dismiss(); }, ), @@ -72,7 +73,7 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) { padding: WidgetStateProperty.all(EdgeInsets.zero), ), onPressed: () => - controller.onShowFilterDialog(context, ctr), + controller.onShowFilterDialog(context, searchPanelCtr), icon: Icon( Icons.filter_list_outlined, size: 18, @@ -101,7 +102,7 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) { delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { if (index == loadingState.response.length - 1) { - ctr.onLoadMore(); + searchPanelCtr.onLoadMore(); } return VideoCardH( videoItem: loadingState.response[index], @@ -113,11 +114,11 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) { ), ) : HttpError( - callback: ctr.onReload, + callback: searchPanelCtr.onReload, ), Error() => HttpError( errMsg: loadingState.errMsg, - callback: ctr.onReload, + callback: searchPanelCtr.onReload, ), _ => throw UnimplementedError(), }, @@ -236,7 +237,8 @@ class VideoPanelController extends GetxController { SmartDialog.dismiss(); // SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'video${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + searchPanelCtr.tag, + ); ctr.pubBegin = DateTime( pubBegin.year, pubBegin.month, @@ -303,7 +305,9 @@ class VideoPanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'video${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); DateTime now = DateTime.now(); if (item['value'] == 0) { ctr.pubBegin = null; @@ -381,7 +385,9 @@ class VideoPanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'video${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); ctr.duration.value = item['value']; SmartDialog.showLoading(msg: 'loading'); await ctr.onReload(); @@ -418,7 +424,9 @@ class VideoPanelController extends GetxController { SmartDialog.showToast("「${item['label']}」的筛选结果"); SearchPanelController ctr = Get.find( - tag: 'video${searchPanelCtr.keyword}'); + tag: searchPanelCtr.searchType.name + + searchPanelCtr.tag, + ); ctr.tids = item['tids']; SmartDialog.showLoading(msg: 'loading'); await ctr.onReload(); diff --git a/lib/pages/search_result/view.dart b/lib/pages/search_result/view.dart index 36ce06a8..8556bede 100644 --- a/lib/pages/search_result/view.dart +++ b/lib/pages/search_result/view.dart @@ -32,11 +32,15 @@ class _SearchResultPageState extends State vsync: this, initialIndex: Get.arguments is int ? Get.arguments : 0, length: SearchType.values.length, - )..addListener(() { + ); + + if (Get.arguments is int) { + _tabController.addListener(() { if (Get.isRegistered()) { Get.find().initIndex = _tabController.index; } }); + } } @override @@ -110,8 +114,7 @@ class _SearchResultPageState extends State onTap: (index) { if (_tabController.indexIsChanging.not) { Get.find( - tag: SearchType.values[index].name + - _searchResultController.keyword) + tag: SearchType.values[index].name + _tag) .animateToTop(); } },