LighthouseApp/lib/app/modules/kr_message/controllers/kr_message_controller.dart
speakeloudest 75d4c48e41
Some checks failed
Build Windows / build (push) Has been cancelled
feat: 源码提交
2025-10-19 23:30:54 -07:00

86 lines
2.3 KiB
Dart
Executable File

import 'package:get/get.dart';
import 'package:easy_refresh/easy_refresh.dart';
import '../../../model/response/kr_message_list.dart';
import '../../../services/api_service/kr_api.user.dart';
import '../../../utils/kr_common_util.dart';
class KRMessageController extends GetxController {
final KRUserApi kr_userApi = KRUserApi();
// 通知列表数据
final RxList<KRMessage> kr_messages = <KRMessage>[].obs;
final RxBool kr_isLoading = false.obs;
final RxBool kr_hasMore = true.obs;
int kr_page = 1;
final int kr_size = 10;
final EasyRefreshController refreshController = EasyRefreshController();
@override
void onInit() {
super.onInit();
kr_getMessageList();
}
// 刷新列表
Future<void> kr_onRefresh() async {
kr_page = 1;
kr_hasMore.value = true;
kr_messages.clear();
await kr_getMessageList();
refreshController.finishRefresh();
}
// 加载更多
Future<void> kr_onLoadMore() async {
if (!kr_hasMore.value || kr_isLoading.value) {
refreshController.finishLoad(IndicatorResult.noMore);
return;
}
kr_page++;
await kr_getMessageList();
refreshController.finishLoad(kr_hasMore.value ? IndicatorResult.success : IndicatorResult.noMore);
}
Future<void> kr_getMessageList() async {
if (kr_isLoading.value) return;
kr_isLoading.value = true;
final either = await kr_userApi.kr_getMessageList(kr_page, kr_size);
either.fold(
(error) {
KRCommonUtil.kr_showToast(error.msg);
if (kr_page > 1) kr_page--;
},
(list) {
if (list.announcements.isEmpty) {
kr_hasMore.value = false;
} else {
// 对消息进行排序,确保 pinned 为 true 的消息排在前面
final sortedMessages = List<KRMessage>.from(list.announcements)
..sort((a, b) {
// 首先按 pinned 状态排序
if (a.pinned != b.pinned) {
return a.pinned ? -1 : 1; // pinned 为 true 的排在前面
}
// 如果 pinned 状态相同,则按创建时间降序排序
return b.createdAt.compareTo(a.createdAt);
});
kr_messages.addAll(sortedMessages);
}
},
);
kr_isLoading.value = false;
}
@override
void onClose() {
refreshController.dispose();
super.onClose();
}
}