feat: member search dynamic

This commit is contained in:
guozhigq
2024-12-14 18:32:20 +08:00
parent 088cb08d99
commit a21b87ab5a
7 changed files with 446 additions and 198 deletions

View File

@ -1,91 +1,147 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pilipala/http/member.dart';
import 'package:pilipala/models/dynamics/result.dart';
import 'package:pilipala/models/member/archive.dart';
class MemberSearchController extends GetxController {
class MemberSearchController extends GetxController
with GetTickerProviderStateMixin {
final ScrollController scrollController = ScrollController();
Rx<TextEditingController> controller = TextEditingController().obs;
TextEditingController textController = TextEditingController();
final FocusNode searchFocusNode = FocusNode();
RxString searchKeyWord = ''.obs;
String hintText = '搜索';
RxString loadingStatus = 'init'.obs;
RxString loadingText = '加载中...'.obs;
bool hasRequest = false;
late int mid;
RxString uname = ''.obs;
int archivePn = 1;
int archiveCount = 0;
RxList<VListItemModel> archiveList = <VListItemModel>[].obs;
int dynamic_pn = 1;
RxList<VListItemModel> dynamicList = <VListItemModel>[].obs;
int ps = 30;
// 投稿相关
final int ps = 30;
int archivePn = 1;
int _archiveCount = 0;
RxString loadingArchiveText = '加载中...'.obs;
RxList<VListItemModel> archiveList = <VListItemModel>[].obs;
// 动态相关
String dynamicOffset = '';
int dynamicPn = 1;
int _dynamicCount = 0;
bool dynamicHasMore = true;
RxString loadingDynamicText = '加载中...'.obs;
RxList<DynamicItemModel> dynamicList = <DynamicItemModel>[].obs;
late TabController tabController;
RxList<String> tabs = <String>['视频', '动态'].obs;
@override
void onInit() {
super.onInit();
mid = int.parse(Get.parameters['mid']!);
uname.value = Get.parameters['uname']!;
tabController = TabController(length: tabs.length, vsync: this);
}
// 清空搜索
void onClear() {
if (searchKeyWord.value.isNotEmpty && controller.value.text != '') {
controller.value.clear();
if (textController.text.isNotEmpty) {
textController.clear();
searchKeyWord.value = '';
tabController.index = 0;
reset();
} else {
Get.back();
}
loadingStatus.value = 'init';
}
void onChange(value) {
searchKeyWord.value = value;
}
// 提交搜索内容
void submit() {
loadingStatus.value = 'loading';
if (hasRequest) {
archivePn = 1;
searchArchives();
if (searchKeyWord.value != textController.text) {
reset();
searchKeyWord.value = textController.text;
}
}
// 搜索视频
Future searchArchives({type = 'init'}) async {
if (type == 'onLoad' && loadingText.value == '没有更多了') {
if (type == 'onLoad' && loadingArchiveText.value == '没有更多了') {
return;
}
var res = await MemberHttp.memberArchive(
mid: mid,
pn: archivePn,
keyword: controller.value.text,
keyword: textController.text,
order: 'pubdate',
);
if (res['status']) {
if (type == 'init' || archivePn == 1) {
archiveList.value = res['data'].list.vlist;
_archiveCount = res['data'].page['count'];
setCount();
} else {
archiveList.addAll(res['data'].list.vlist);
}
archiveCount = res['data'].page['count'];
if (archiveList.length == archiveCount) {
loadingText.value = '没有更多了';
if (archiveList.length == _archiveCount) {
loadingArchiveText.value = '没有更多了';
}
archivePn += 1;
hasRequest = true;
}
loadingStatus.value = 'finish';
return res;
}
// 搜索动态
Future searchDynamic() async {}
Future searchDynamic({type = 'init'}) async {
if (!dynamicHasMore) {
return;
}
var res = await MemberHttp.memberDynamicSearch(
pn: dynamicPn,
mid: mid,
offset: dynamicOffset,
keyword: textController.text,
);
if (res['status']) {
dynamicOffset = res['data'].offset;
dynamicHasMore = res['data'].hasMore;
if (type == 'init') {
dynamicList.value = res['data'].items;
_dynamicCount = res['data'].total;
setCount();
} else {
dynamicList.addAll(res['data'].items);
}
if (!dynamicHasMore) {
loadingDynamicText.value = '没有更多了';
}
dynamicPn += 1;
}
return res;
}
//
onLoad() {
searchArchives(type: 'onLoad');
if (tabController.index == 0) {
searchArchives(type: 'onLoad');
} else {
searchDynamic(type: 'onLoad');
}
}
// 重置状态
void reset() {
archiveList.clear();
dynamicList.clear();
archivePn = 1;
dynamicPn = 1;
dynamicOffset = '';
dynamicHasMore = true;
_archiveCount = 0;
_dynamicCount = 0;
loadingArchiveText.value = '加载中...';
loadingDynamicText.value = '加载中...';
}
setCount() {
tabs.value = [
"视频${_archiveCount > 0 ? '($_archiveCount)' : ''}",
"动态${_dynamicCount > 0 ? '($_dynamicCount)' : ''}"
];
}
}