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 messageList = [].obs; int _pageNum = 1; final int _pageSize = 10; // 模拟所有已读状态,实际应根据接口判断 final RxBool allRead = false.obs; @override void onInit() { super.onInit(); _loadData(isRefresh: true); } Future _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 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); } }