107 lines
2.9 KiB
Dart
107 lines
2.9 KiB
Dart
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);
|
||
}
|
||
}
|