import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/search.dart'; import 'package:PiliPlus/models/common/search/article_search_type.dart'; import 'package:PiliPlus/models/common/search/user_search_type.dart'; import 'package:PiliPlus/models/common/search/video_search_type.dart'; import 'package:PiliPlus/models/common/search_type.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:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; class SearchPanelController, T> extends CommonListController { SearchPanelController({ required this.keyword, required this.searchType, required this.tag, }); final String tag; final String keyword; final SearchType searchType; // sort // common String order = ''; // video VideoDurationType? videoDurationType; // int duration VideoZoneType? videoZoneType; // int? tids; int? pubBegin; int? pubEnd; // user Rx? userOrderType; Rx? userType; // article Rx? articleZoneType; // int? categoryId; SearchResultController? searchResultController; void onSortSearch({ bool getBack = true, String? label, }) { if (getBack) Get.back(); SmartDialog.dismiss(); if (label != null) { SmartDialog.showToast("「$label」的筛选结果"); } SmartDialog.showLoading(msg: 'loading'); onReload().whenComplete(SmartDialog.dismiss); } @override void onInit() { super.onInit(); try { searchResultController = Get.find(tag: tag) ..toTopIndex.listen((index) { if (index == searchType.index) { scrollController.animToTop(); } }); } catch (_) {} queryData(); } @override List? getDataList(R response) { searchResultController?.count[searchType.index] = response.numResults ?? 0; return response.list; } @override Future> customGetData() => SearchHttp.searchByType( searchType: searchType, keyword: keyword, page: page, order: order, duration: videoDurationType?.index, tids: videoZoneType?.tids, orderSort: userOrderType?.value.orderSort, userType: userType?.value.index, categoryId: articleZoneType?.value.categoryId, pubBegin: pubBegin, pubEnd: pubEnd, ); @override Future onReload() { scrollController.jumpToTop(); return super.onReload(); } }