fix: search ctr

related #306

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-02-24 21:04:25 +08:00
parent 8d3990124e
commit 0ef85f2551
5 changed files with 46 additions and 25 deletions

View File

@@ -46,7 +46,7 @@ class _SearchPanelState extends State<SearchPanel>
searchType: widget.searchType, searchType: widget.searchType,
tag: widget.tag, tag: widget.tag,
), ),
tag: widget.searchType.name + widget.keyword, tag: widget.searchType.name + widget.tag,
); );
} }

View File

@@ -14,11 +14,12 @@ import 'package:PiliPlus/utils/utils.dart';
import '../../../utils/grid.dart'; import '../../../utils/grid.dart';
Widget searchArticlePanel(context, searchPanelCtr, LoadingState loadingState) { Widget searchArticlePanel(BuildContext context,
SearchPanelController searchPanelCtr, LoadingState loadingState) {
TextStyle textStyle = TextStyle( TextStyle textStyle = TextStyle(
fontSize: Theme.of(context).textTheme.labelSmall!.fontSize, fontSize: Theme.of(context).textTheme.labelSmall!.fontSize,
color: Theme.of(context).colorScheme.outline); color: Theme.of(context).colorScheme.outline);
final ctr = Get.put(ArticlePanelController()); final ctr = Get.put(ArticlePanelController(), tag: searchPanelCtr.tag);
return CustomScrollView( return CustomScrollView(
controller: searchPanelCtr.scrollController, controller: searchPanelCtr.scrollController,
@@ -288,7 +289,9 @@ class ArticlePanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'article${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.order.value = item['order']; ctr.order.value = item['order'];
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
await ctr.onReload(); await ctr.onReload();
@@ -321,7 +324,9 @@ class ArticlePanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'article${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.categoryId = item['categoryId']; ctr.categoryId = item['categoryId'];
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
await ctr.onReload(); await ctr.onReload();

View File

@@ -12,11 +12,12 @@ import 'package:PiliPlus/utils/utils.dart';
import '../../../utils/grid.dart'; import '../../../utils/grid.dart';
Widget searchUserPanel(context, searchPanelCtr, LoadingState loadingState) { Widget searchUserPanel(BuildContext context,
SearchPanelController searchPanelCtr, LoadingState loadingState) {
TextStyle style = TextStyle( TextStyle style = TextStyle(
fontSize: Theme.of(context).textTheme.labelSmall!.fontSize, fontSize: Theme.of(context).textTheme.labelSmall!.fontSize,
color: Theme.of(context).colorScheme.outline); color: Theme.of(context).colorScheme.outline);
final ctr = Get.put(UserPanelController()); final ctr = Get.put(UserPanelController(), tag: searchPanelCtr.tag);
return CustomScrollView( return CustomScrollView(
controller: searchPanelCtr.scrollController, controller: searchPanelCtr.scrollController,
@@ -213,7 +214,9 @@ class UserPanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'bili_user${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.orderSort = item['orderSort']; ctr.orderSort = item['orderSort'];
ctr.order.value = item['order']; ctr.order.value = item['order'];
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
@@ -247,7 +250,9 @@ class UserPanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'bili_user${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.userType = item['userType']; ctr.userType = item['userType'];
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
await ctr.onReload(); await ctr.onReload();

View File

@@ -14,10 +14,11 @@ import 'package:intl/intl.dart';
import '../../../common/constants.dart'; import '../../../common/constants.dart';
import '../../../utils/grid.dart'; import '../../../utils/grid.dart';
Widget searchVideoPanel(context, ctr, LoadingState loadingState) { Widget searchVideoPanel(BuildContext context,
final controller = Get.put(VideoPanelController()); SearchPanelController searchPanelCtr, LoadingState loadingState) {
final controller = Get.put(VideoPanelController(), tag: searchPanelCtr.tag);
return CustomScrollView( return CustomScrollView(
controller: ctr.scrollController, controller: searchPanelCtr.scrollController,
slivers: [ slivers: [
SliverPersistentHeader( SliverPersistentHeader(
pinned: false, pinned: false,
@@ -48,10 +49,10 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) {
: Theme.of(context).colorScheme.outline, : Theme.of(context).colorScheme.outline,
onTap: (value) async { onTap: (value) async {
controller.selectedType.value = i['type']; controller.selectedType.value = i['type'];
ctr.order.value = searchPanelCtr.order.value =
i['type'].toString().split('.').last; i['type'].toString().split('.').last;
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
await ctr.onReload(); await searchPanelCtr.onReload();
SmartDialog.dismiss(); SmartDialog.dismiss();
}, },
), ),
@@ -72,7 +73,7 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) {
padding: WidgetStateProperty.all(EdgeInsets.zero), padding: WidgetStateProperty.all(EdgeInsets.zero),
), ),
onPressed: () => onPressed: () =>
controller.onShowFilterDialog(context, ctr), controller.onShowFilterDialog(context, searchPanelCtr),
icon: Icon( icon: Icon(
Icons.filter_list_outlined, Icons.filter_list_outlined,
size: 18, size: 18,
@@ -101,7 +102,7 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) {
delegate: SliverChildBuilderDelegate( delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) { (BuildContext context, int index) {
if (index == loadingState.response.length - 1) { if (index == loadingState.response.length - 1) {
ctr.onLoadMore(); searchPanelCtr.onLoadMore();
} }
return VideoCardH( return VideoCardH(
videoItem: loadingState.response[index], videoItem: loadingState.response[index],
@@ -113,11 +114,11 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) {
), ),
) )
: HttpError( : HttpError(
callback: ctr.onReload, callback: searchPanelCtr.onReload,
), ),
Error() => HttpError( Error() => HttpError(
errMsg: loadingState.errMsg, errMsg: loadingState.errMsg,
callback: ctr.onReload, callback: searchPanelCtr.onReload,
), ),
_ => throw UnimplementedError(), _ => throw UnimplementedError(),
}, },
@@ -236,7 +237,8 @@ class VideoPanelController extends GetxController {
SmartDialog.dismiss(); SmartDialog.dismiss();
// SmartDialog.showToast("「${item['label']}」的筛选结果"); // SmartDialog.showToast("「${item['label']}」的筛选结果");
SearchPanelController ctr = Get.find<SearchPanelController>( SearchPanelController ctr = Get.find<SearchPanelController>(
tag: 'video${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name + searchPanelCtr.tag,
);
ctr.pubBegin = DateTime( ctr.pubBegin = DateTime(
pubBegin.year, pubBegin.year,
pubBegin.month, pubBegin.month,
@@ -303,7 +305,9 @@ class VideoPanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'video${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
DateTime now = DateTime.now(); DateTime now = DateTime.now();
if (item['value'] == 0) { if (item['value'] == 0) {
ctr.pubBegin = null; ctr.pubBegin = null;
@@ -381,7 +385,9 @@ class VideoPanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'video${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.duration.value = item['value']; ctr.duration.value = item['value'];
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
await ctr.onReload(); await ctr.onReload();
@@ -418,7 +424,9 @@ class VideoPanelController extends GetxController {
SmartDialog.showToast("${item['label']}」的筛选结果"); SmartDialog.showToast("${item['label']}」的筛选结果");
SearchPanelController ctr = SearchPanelController ctr =
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: 'video${searchPanelCtr.keyword}'); tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.tids = item['tids']; ctr.tids = item['tids'];
SmartDialog.showLoading(msg: 'loading'); SmartDialog.showLoading(msg: 'loading');
await ctr.onReload(); await ctr.onReload();

View File

@@ -32,12 +32,16 @@ class _SearchResultPageState extends State<SearchResultPage>
vsync: this, vsync: this,
initialIndex: Get.arguments is int ? Get.arguments : 0, initialIndex: Get.arguments is int ? Get.arguments : 0,
length: SearchType.values.length, length: SearchType.values.length,
)..addListener(() { );
if (Get.arguments is int) {
_tabController.addListener(() {
if (Get.isRegistered<SSearchController>()) { if (Get.isRegistered<SSearchController>()) {
Get.find<SSearchController>().initIndex = _tabController.index; Get.find<SSearchController>().initIndex = _tabController.index;
} }
}); });
} }
}
@override @override
void dispose() { void dispose() {
@@ -110,8 +114,7 @@ class _SearchResultPageState extends State<SearchResultPage>
onTap: (index) { onTap: (index) {
if (_tabController.indexIsChanging.not) { if (_tabController.indexIsChanging.not) {
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: SearchType.values[index].name + tag: SearchType.values[index].name + _tag)
_searchResultController.keyword)
.animateToTop(); .animateToTop();
} }
}, },