refactor: fav search

This commit is contained in:
bggRGjQaUbCoE
2024-09-13 15:09:18 +08:00
parent 6a05717d6e
commit 8d22a5b1ed
4 changed files with 101 additions and 111 deletions

View File

@@ -1,26 +1,23 @@
import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/pages/common/common_controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:PiliPalaX/http/user.dart';
import 'package:PiliPalaX/models/user/fav_detail.dart';
import '../../http/video.dart';
class FavSearchController extends GetxController {
final ScrollController scrollController = ScrollController();
class FavSearchController extends CommonController {
Rx<TextEditingController> controller = TextEditingController().obs;
final FocusNode searchFocusNode = FocusNode();
RxString searchKeyWord = ''.obs; // 搜索词
String hintText = '请输入已收藏视频名称'; // 默认
RxBool loadingStatus = false.obs; // 加载状态
RxString loadingText = '加载中...'.obs; // 加载提示
bool hasMore = false;
late int searchType;
late int mediaId;
int currentPage = 1; // 当前页
int count = 0; // 总数
RxList<FavDetailItemData> favList = <FavDetailItemData>[].obs;
@override
void onInit() {
@@ -39,55 +36,60 @@ class FavSearchController extends GetxController {
}
}
@override
Future onRefresh() {
hasMore = true;
return super.onRefresh();
}
void onChange(value) {
searchKeyWord.value = value;
}
// 提交搜索内容
void submit() {
loadingStatus.value = true;
currentPage = 1;
searchFav();
}
// 搜索收藏夹视频
Future searchFav({type = 'init'}) async {
var res = await await UserHttp.userFavFolderDetail(
pn: currentPage,
ps: 20,
mediaId: mediaId,
keyword: searchKeyWord.value,
type: searchType,
);
if (res['status']) {
if (currentPage == 1 && type == 'init') {
favList.value = res['data'].medias;
} else if (type == 'onLoad') {
favList.addAll(res['data'].medias);
}
hasMore = res['data'].hasMore;
@override
Future queryData([bool isRefresh = true]) {
if (!hasMore) {
return Future.value();
}
currentPage += 1;
loadingStatus.value = false;
return super.queryData(isRefresh);
}
onLoad() {
if (!hasMore) return;
searchFav(type: 'onLoad');
@override
bool customHandleResponse(Success response) {
List currentList = loadingState.value is Success
? (loadingState.value as Success).response
: [];
List dataList = currentPage == 1
? response.response.medias
: currentList + response.response.medias;
loadingState.value = LoadingState.success(dataList);
hasMore = response.response.hasMore;
return true;
}
onCancelFav(int id) async {
var result = await VideoHttp.favVideo(
aid: id, addIds: '', delIds: mediaId.toString());
if (result['status']) {
List dataList = favList;
for (var i in dataList) {
if (i.id == id) {
dataList.remove(i);
break;
}
}
List dataList = (loadingState.value as Success).response;
dataList = dataList.where((item) => item.id != id).toList();
loadingState.value = LoadingState.success(dataList);
SmartDialog.showToast('取消收藏');
}
}
@override
Future<LoadingState> customGetData() => UserHttp.userFavFolderDetail(
pn: currentPage,
ps: 20,
mediaId: mediaId,
keyword: searchKeyWord.value,
type: searchType,
);
@override
void onClose() {
searchFocusNode.dispose();
super.onClose();
}
}