消息红点提示

This commit is contained in:
czz
2025-07-24 18:32:57 +08:00
parent 4adac4a6bf
commit cc6ef83587
4 changed files with 180 additions and 57 deletions

View File

@@ -8,6 +8,7 @@ import 'package:vbvs_app/common/color/ServiceConstant.dart';
import 'package:vbvs_app/common/color/app_uri_status.dart';
import 'package:vbvs_app/common/util/DailyLogUtils.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/requestWithLog.dart';
import 'package:vbvs_app/model/api_response.dart';
part 'message_controller.g.dart'; // 由json_serializable自动生成的部分
@@ -40,20 +41,21 @@ class MhMessageController extends GetControllerEx<MhMessageModel> {
attr = GetModel(MhMessageModel()).obs;
}
RxList messageList = [].obs;
RxList bodyMessageList = [].obs;
RxList systemMessageList = [].obs;
Future<ApiResponse> getMessageList({String? key}) async {
Future<ApiResponse> getMessageList(String messageType) async {
try {
ApiResponse apiResponse = ApiResponse(code: -1, msg: "请求失败".tr);
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.message_list;
String messageType = "app_system";
if (model.type == 1) {
messageType = "app_vsm";
} else {
messageType = "app_system";
}
// String messageType = "app_system";
// if (model.type == 1) {
// messageType = "app_vsm";
// } else {
// messageType = "app_system";
// }
String queryUrl =
"${serviceAddress}${serviceName}${serviceApi}?type=${messageType}";
String? language = "";
@@ -75,8 +77,17 @@ class MhMessageController extends GetControllerEx<MhMessageModel> {
ApiResponse.fromJson(responseData, (object) => object);
MyUtils.formatResponse(res, "请求成功".tr, "请求失败".tr);
if (res.code == HttpStatusCodes.ok) {
// updateAll();
// messageList.value = res.data;
if (res.code == HttpStatusCodes.ok) {
if (messageType == "app_vsm") {
bodyMessageList.assignAll(res.data ?? []);
} else if (messageType == "app_system") {
systemMessageList.assignAll(res.data ?? []);
}
}
updateAll();
messageList.value = res.data;
return res;
}
} else {
@@ -127,14 +138,14 @@ class MhMessageController extends GetControllerEx<MhMessageModel> {
(e) => e['type'] == 'app_vsm',
orElse: () => null,
);
model.body_message_read = vsmItem?['count'] ?? 0;
model.body_message_read = (vsmItem?['count'] ?? 0) > 0 ? 1 : 0;
// 查找 type 为 app_system 的项
var systemItem = dataList.firstWhere(
(e) => e['type'] == 'app_system',
orElse: () => null,
);
model.system_message_read = systemItem?['count'] ?? 0;
model.system_message_read = (systemItem?['count'] ?? 0) > 0 ? 1 : 0;
updateAll();
return res;
@@ -195,4 +206,38 @@ class MhMessageController extends GetControllerEx<MhMessageModel> {
return ApiResponse(code: -1, msg: "服务器.失败".tr);
}
}
// 全部消息已读
// / 更新消息为已读状态
// / 如果传入 [mid],则更新指定消息;如果传入 [all] 为 true则更新该类型的所有消息
Future<void> updateMessageReadStatus(String messageType,
{String? mid, bool all = false}) async {
final serviceAddress = ServiceConstant.service_address;
final serviceName = ServiceConstant.server_service;
final serviceApi = ServiceConstant.message_read;
// 构建 query 参数
String queryUrl =
"$serviceAddress$serviceName$serviceApi?type=$messageType";
if (all) {
queryUrl += "&mid=ALL";
} else if (mid != null && mid.isNotEmpty) {
queryUrl += "&mid=$mid";
}
await requestWithLog(
logTitle: all ? '更新所有消息为已读' : '更新消息为已读',
method: MyHttpMethod.post,
queryUrl: queryUrl,
onSuccess: (res) {
if (res.code == HttpStatusCodes.ok) {
getMessageList(messageType);
}
},
onFailure: (res) {
print('失败');
},
);
}
}