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,
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';
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<SearchPanelController>(
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<SearchPanelController>(
tag: 'article${searchPanelCtr.keyword}');
tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.categoryId = item['categoryId'];
SmartDialog.showLoading(msg: 'loading');
await ctr.onReload();

View File

@@ -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<SearchPanelController>(
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<SearchPanelController>(
tag: 'bili_user${searchPanelCtr.keyword}');
tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.userType = item['userType'];
SmartDialog.showLoading(msg: 'loading');
await ctr.onReload();

View File

@@ -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<SearchPanelController>(
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<SearchPanelController>(
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<SearchPanelController>(
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<SearchPanelController>(
tag: 'video${searchPanelCtr.keyword}');
tag: searchPanelCtr.searchType.name +
searchPanelCtr.tag,
);
ctr.tids = item['tids'];
SmartDialog.showLoading(msg: 'loading');
await ctr.onReload();

View File

@@ -32,11 +32,15 @@ class _SearchResultPageState extends State<SearchResultPage>
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<SSearchController>()) {
Get.find<SSearchController>().initIndex = _tabController.index;
}
});
}
}
@override
@@ -110,8 +114,7 @@ class _SearchResultPageState extends State<SearchResultPage>
onTap: (index) {
if (_tabController.indexIsChanging.not) {
Get.find<SearchPanelController>(
tag: SearchType.values[index].name +
_searchResultController.keyword)
tag: SearchType.values[index].name + _tag)
.animateToTop();
}
},