消息中心
This commit is contained in:
106
ln_jq_app/lib/pages/c_page/message/controller.dart
Normal file
106
ln_jq_app/lib/pages/c_page/message/controller.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user