Files
ln-ios/ln_jq_app/lib/pages/c_page/message/controller.dart
2026-01-07 17:43:22 +08:00

107 lines
2.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
}