消息中心

This commit is contained in:
2026-01-07 17:43:22 +08:00
parent 953e5e773c
commit 7d9c879a4e
6 changed files with 295 additions and 1 deletions

View File

@@ -0,0 +1,106 @@
import 'package:get/get.dart';
import 'package:getx_scaffold/getx_scaffold.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'model.dart';
class MessageController extends GetxController {
final RefreshController refreshController = RefreshController(initialRefresh: false);
final RxList<MessageModel> messageList = <MessageModel>[].obs;
int _pageNum = 1;
final int _pageSize = 10;
// 模拟所有已读状态,实际应根据接口判断
final RxBool allRead = false.obs;
@override
void onInit() {
super.onInit();
_loadData(isRefresh: true);
}
Future<void> _loadData({bool isRefresh = false}) async {
if (isRefresh) {
_pageNum = 1;
} else {
_pageNum++;
}
try {
// 模拟请求延迟
await Future.delayed(const Duration(milliseconds: 500));
// 模拟数据 (请替换为实际接口请求)
// var response = await HttpService.to.post('message/list', data: {'pageNum': _pageNum, 'pageSize': _pageSize});
List<MessageModel> newData = List.generate(10, (index) {
int id = (_pageNum - 1) * _pageSize + index;
return MessageModel(
id: id.toString(),
title: '加氢预约失败通知',
content: '1月6日14时30分-1月6日15时30分北京朝阳加氢站加氢预约失败。原因设备维护',
createTime: '刚刚',
isRead: index % 3 == 0 ? 1 : 0,
);
});
if (isRefresh) {
messageList.assignAll(newData);
refreshController.refreshCompleted();
} else {
if (newData.isEmpty) {
refreshController.loadNoData();
} else {
messageList.addAll(newData);
refreshController.loadComplete();
}
}
_checkAllRead();
} catch (e) {
if (isRefresh) {
refreshController.refreshFailed();
} else {
refreshController.loadFailed();
}
}
}
void onRefresh() => _loadData(isRefresh: true);
void onLoading() => _loadData(isRefresh: false);
// 标记全部已读
void markAllRead() async {
showLoading('正在标记...');
try {
// await HttpService.to.post('message/readAll');
await Future.delayed(const Duration(milliseconds: 500));
for (var msg in messageList) {
msg.isRead = 1;
}
messageList.refresh();
allRead.value = true;
dismissLoading();
showSuccessToast('全部已读');
} catch (e) {
dismissLoading();
showErrorToast('操作失败');
}
}
// 标记单条已读(弹窗显示时调用)
void markRead(MessageModel message) async {
if (message.isRead == 1) return;
// await HttpService.to.post('message/read', data: {'id': message.id});
message.isRead = 1;
messageList.refresh();
_checkAllRead();
}
void _checkAllRead() {
allRead.value = messageList.every((msg) => msg.isRead == 1);
}
}