import 'package:PiliPalaX/http/loading_state.dart'; import 'package:PiliPalaX/pages/common/common_controller.dart'; import 'package:get/get.dart'; import 'package:PiliPalaX/http/search.dart'; import 'package:PiliPalaX/models/common/search_type.dart'; import 'package:PiliPalaX/utils/id_utils.dart'; import 'package:PiliPalaX/utils/utils.dart'; class SearchPanelController extends CommonController { SearchPanelController({this.keyword, this.searchType}); String? keyword; SearchType? searchType; // 结果排序方式 搜索类型为视频、专栏及相簿时 RxString order = ''.obs; // 视频时长筛选 仅用于搜索视频 RxInt duration = 0.obs; @override void onInit() { super.onInit(); queryData(); } @override void handleSuccess(List currentList, List dataList) { onPushDetail(dataList); } void onPushDetail(resultList) async { // 匹配输入内容,如果是AV、BV号且有结果 直接跳转详情页 Map matchRes = IdUtils.matchAvorBv(input: keyword); List matchKeys = matchRes.keys.toList(); String? bvid; try { bvid = resultList.first.bvid; } catch (_) { bvid = null; } // keyword 可能输入纯数字 int? aid; try { aid = resultList.first.aid; } catch (_) { aid = null; } if (matchKeys.isNotEmpty && searchType == SearchType.video || aid.toString() == keyword) { String heroTag = Utils.makeHeroTag(bvid); int cid = await SearchHttp.ab2c(aid: aid, bvid: bvid); if (matchKeys.isNotEmpty && matchKeys.first == 'BV' && matchRes[matchKeys.first] == bvid || matchKeys.isNotEmpty && matchKeys.first == 'AV' && matchRes[matchKeys.first] == aid || aid.toString() == keyword) { Get.toNamed( '/video?bvid=$bvid&cid=$cid', arguments: {'videoItem': resultList.first, 'heroTag': heroTag}, ); } } } @override Future customGetData() => SearchHttp.searchByType( searchType: searchType!, keyword: keyword!, page: currentPage, order: searchType!.type != 'video' ? null : order.value, duration: searchType!.type != 'video' ? null : duration.value, ); }