From 3a3c01b618aa3ec665bdace753fdf9bf0f8ab1d3 Mon Sep 17 00:00:00 2001 From: wyf <494641114@qq.com> Date: Sat, 24 May 2025 18:14:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B6=88=E6=81=AF=E5=9B=9E?= =?UTF-8?q?=E7=9C=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/message_controller.dart | 60 +++---- .../message/message_review_controller.dart | 35 ++++ .../message/message_review_controller.g.dart | 15 ++ lib/main.dart | 2 + .../component/ReviewMessageWidgetWidget.dart | 156 ++++++++++++++++++ lib/pages/device/message_review_page.dart | 131 +++++++++------ 6 files changed, 321 insertions(+), 78 deletions(-) create mode 100644 lib/controller/message/message_review_controller.dart create mode 100644 lib/controller/message/message_review_controller.g.dart create mode 100644 lib/pages/device/component/ReviewMessageWidgetWidget.dart diff --git a/lib/controller/message/message_controller.dart b/lib/controller/message/message_controller.dart index 448d22a..9aec8b2 100644 --- a/lib/controller/message/message_controller.dart +++ b/lib/controller/message/message_controller.dart @@ -56,17 +56,17 @@ class MessageController extends GetControllerEx { } String queryUrl = "${serviceAddress}${serviceName}${serviceApi}?type=${messageType}"; - String? language = ""; - if (languageController.selectLanguage != null) { - language = languageController.selectLanguage.value!.language_code; - } - if (language != null && language.isNotEmpty) { - if (queryUrl.contains("?")) { - queryUrl += "&lang=$language"; - } else { - queryUrl += "?lang=$language"; - } + String? language = ""; + if (languageController.selectLanguage != null) { + language = languageController.selectLanguage.value!.language_code; + } + if (language != null && language.isNotEmpty) { + if (queryUrl.contains("?")) { + queryUrl += "&lang=$language"; + } else { + queryUrl += "?lang=$language"; } + } var response = await EasyDartModule.dio.get(queryUrl); if (response != null) { var responseData = @@ -101,16 +101,16 @@ class MessageController extends GetControllerEx { String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; String? language = ""; - if (languageController.selectLanguage != null) { - language = languageController.selectLanguage.value!.language_code; - } - if (language != null && language.isNotEmpty) { - if (queryUrl.contains("?")) { - queryUrl += "&lang=$language"; - } else { - queryUrl += "?lang=$language"; - } + if (languageController.selectLanguage != null) { + language = languageController.selectLanguage.value!.language_code; + } + if (language != null && language.isNotEmpty) { + if (queryUrl.contains("?")) { + queryUrl += "&lang=$language"; + } else { + queryUrl += "?lang=$language"; } + } var response = await EasyDartModule.dio.get(queryUrl); if (response != null) { var responseData = @@ -135,7 +135,7 @@ class MessageController extends GetControllerEx { orElse: () => null, ); model.system_message_read = systemItem?['count'] ?? 0; - + updateAll(); return res; } @@ -166,17 +166,17 @@ class MessageController extends GetControllerEx { queryUrl += "?type=$type"; } -String? language = ""; - if (languageController.selectLanguage != null) { - language = languageController.selectLanguage.value!.language_code; - } - if (language != null && language.isNotEmpty) { - if (queryUrl.contains("?")) { - queryUrl += "&lang=$language"; - } else { - queryUrl += "?lang=$language"; - } + String? language = ""; + if (languageController.selectLanguage != null) { + language = languageController.selectLanguage.value!.language_code; + } + if (language != null && language.isNotEmpty) { + if (queryUrl.contains("?")) { + queryUrl += "&lang=$language"; + } else { + queryUrl += "?lang=$language"; } + } var response = await EasyDartModule.dio.post(queryUrl); if (response != null) { diff --git a/lib/controller/message/message_review_controller.dart b/lib/controller/message/message_review_controller.dart new file mode 100644 index 0000000..d764b17 --- /dev/null +++ b/lib/controller/message/message_review_controller.dart @@ -0,0 +1,35 @@ +import 'package:ef/ef.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'message_review_controller.g.dart'; // 由json_serializable自动生成的部分 + +@JsonSerializable() +class MessageReviewModel { + int? type = 1; //设备类型 1:体征消息 2.系统消息 + + MessageReviewModel(); + + // 从JSON反序列化时的异常处理 + + factory MessageReviewModel.fromJson(Map json) { + try { + return _$MessageReviewModelFromJson(json); + } catch (e) { + // 在实际应用中,应该有更细致的异常处理策略和错误日志 + return MessageReviewModel(); // 或者返回一个带有错误信息的特定DeviceInfoModel实例 + } + } + + // 序列化为JSON时的异常处理 + Map toJson() => _$MessageReviewModelToJson(this); +} + +class MessageReviewController extends GetControllerEx { + MessageReviewModel() { + attr = GetModel(MessageReviewModel()).obs; + } + + RxList messageList = [].obs; + + +} diff --git a/lib/controller/message/message_review_controller.g.dart b/lib/controller/message/message_review_controller.g.dart new file mode 100644 index 0000000..89ea191 --- /dev/null +++ b/lib/controller/message/message_review_controller.g.dart @@ -0,0 +1,15 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'message_review_controller.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +MessageReviewModel _$MessageReviewModelFromJson(Map json) => + MessageReviewModel()..type = (json['type'] as num?)?.toInt(); + +Map _$MessageReviewModelToJson(MessageReviewModel instance) => + { + 'type': instance.type, + }; diff --git a/lib/main.dart b/lib/main.dart index 9483a4d..a00e383 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -28,6 +28,7 @@ import 'package:vbvs_app/controller/login/login_controller.dart'; import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; import 'package:vbvs_app/controller/main_bottom/main_page_controller.dart'; import 'package:vbvs_app/controller/message/message_controller.dart'; +import 'package:vbvs_app/controller/message/message_review_controller.dart'; import 'package:vbvs_app/controller/person/person_controller.dart'; import 'package:vbvs_app/controller/repair/repair_controller.dart'; import 'package:vbvs_app/controller/setting/language/language_controller.dart'; @@ -245,6 +246,7 @@ class MyApp extends StatelessWidget { Get.lazyPut(() => PrivacyPdfController()), Get.lazyPut(() => CalendarController()), Get.lazyPut(() => SleepReportController()), + Get.lazyPut(() => MessageReviewController()), ])); }); } diff --git a/lib/pages/device/component/ReviewMessageWidgetWidget.dart b/lib/pages/device/component/ReviewMessageWidgetWidget.dart new file mode 100644 index 0000000..819a78b --- /dev/null +++ b/lib/pages/device/component/ReviewMessageWidgetWidget.dart @@ -0,0 +1,156 @@ +import 'package:ef/ef.dart'; +import 'package:flutter/material.dart'; +import 'package:flutterflow_ui/flutterflow_ui.dart'; +import 'package:vbvs_app/common/util/FitTool.dart'; +import 'package:vbvs_app/component/tool/ClickableContainer.dart'; +import 'package:vbvs_app/controller/device/device_share_controller.dart'; +import 'package:vbvs_app/controller/message/message_controller.dart'; +import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; +import 'package:vbvs_app/enum/MessageStatus.dart'; + +class ReviewMessageWidgetWidget extends StatefulWidget { + final data; + + const ReviewMessageWidgetWidget({super.key, required this.data}); + + @override + State createState() => + _ReviewMessageWidgetWidgetState(); +} + +class _ReviewMessageWidgetWidgetState extends State { + ThemeController themeController = Get.find(); + MessageController messageController = Get.find(); + DeviceShareController deviceShareController = Get.find(); + + @override + Widget build(BuildContext context) { + var messageInfo = widget.data; + return ClickableContainer( + backgroundColor: themeController.currentColor.sc5, + highlightColor: themeController.currentColor.sc3, + borderRadius: 20.rpx, + padding: EdgeInsetsDirectional.fromSTEB(31.rpx, 33.rpx, 0.rpx, 33.rpx), + onTap: () {}, + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Container( + width: double.infinity, + constraints: BoxConstraints( + minHeight: 66.rpx, + ), + child: Align( + alignment: AlignmentDirectional(-1, 0), + child: Text( + // '实时监测结果通知'.tr, + "${messageInfo['data']!['title']}", + style: FlutterFlowTheme.of(context).bodyMedium.override( + fontFamily: 'Inter', + fontSize: 30.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc3, + ), + ), + ), + ), + Row( + mainAxisSize: MainAxisSize.max, + children: [ + Container( + constraints: BoxConstraints( + minWidth: 30.rpx, + maxWidth: 140.rpx, + ), + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: messageInfo['data']['val'] + .map((mapItem) => + _buildInfoItem(context, mapItem['k'] ?? '')) + .toList(), + ), + ), + Container( + constraints: BoxConstraints( + minWidth: 30.rpx, + ), + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: messageInfo['data']['val'] + .map((mapItem) => + _buildValueItem(context, mapItem['v'] ?? '')) + .toList(), + ), + ), + ].divide(SizedBox(width: 35.rpx)), + ), + ], + ), + ); + } + + Widget _buildInfoItem(BuildContext context, String label) { + return Container( + constraints: BoxConstraints( + minHeight: 62.rpx, + ), + child: Align( + alignment: AlignmentDirectional(-1, 0), + child: Text( + overflow: TextOverflow.ellipsis, + maxLines: 1, + label.tr, + style: FlutterFlowTheme.of(context).bodyMedium.override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc4, + ), + ), + ), + ); + } + + Widget _buildValueItem(BuildContext context, String value) { + return Container( + constraints: BoxConstraints( + minHeight: 62.rpx, + ), + child: Align( + alignment: AlignmentDirectional(-1, 0), + child: Text( + overflow: TextOverflow.ellipsis, + maxLines: 1, + value, + style: FlutterFlowTheme.of(context).bodyMedium.override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc3, + ), + ), + ), + ); + } + + String getMessageStatus(int status) { + if (status == null) { + return '未知数据'.tr; + } + if (status == MessageStatus.noNeed.code) { + return '无需处理'.tr; + } + if (status == MessageStatus.pending.code) { + return "待处理".tr; + } + if (status == MessageStatus.completed.code) { + return "已处理".tr; + } + if (status == MessageStatus.timeout.code) { + return "已超时".tr; + } + return '未知数据'.tr; + } +} diff --git a/lib/pages/device/message_review_page.dart b/lib/pages/device/message_review_page.dart index 73992a4..07bc4c5 100644 --- a/lib/pages/device/message_review_page.dart +++ b/lib/pages/device/message_review_page.dart @@ -1,16 +1,13 @@ import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; -import 'package:vbvs_app/common/color/ServiceConstant.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; -import 'package:vbvs_app/common/util/requestWithLog.dart'; import 'package:vbvs_app/component/NullDataComponentWidget.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; -import 'package:vbvs_app/controller/repair/repair_controller.dart'; -import 'package:vbvs_app/model/api_response.dart'; -import 'package:vbvs_app/pages/repair/component/RepairHistoryInfoWidget.dart'; +import 'package:vbvs_app/controller/message/message_review_controller.dart'; +import 'package:vbvs_app/pages/device/component/ReviewMessageWidgetWidget.dart'; class MessageReviewPage extends StatefulWidget { var data; //1.绑定时 2.绑定后 @@ -21,7 +18,7 @@ class MessageReviewPage extends StatefulWidget { } class _MessageReviewPageState extends State { - RepairController repairController = Get.find(); + MessageReviewController messageReviewController = Get.find(); @override void initState() { @@ -76,21 +73,6 @@ class _MessageReviewPageState extends State { // child: returnIconButtom, child: returnIconButtomAddCallback(() {}), ), - // Positioned( - // right: 20.rpx, - // child: ClickableContainer( - // backgroundColor: Colors.transparent, - // highlightColor: themeController.currentColor.sc16, - // padding: EdgeInsets.all(8.rpx), - // onTap: () {}, - // child: SvgPicture.asset( - // 'assets/img/icon/history.svg', - // width: 39.rpx, - // height: 39.rpx, - // color: themeController.currentColor.sc16, - // ), - // ), - // ), ], ), ), @@ -102,28 +84,11 @@ class _MessageReviewPageState extends State { child: Padding( padding: EdgeInsetsDirectional.fromSTEB(30.rpx, 29.rpx, 30.rpx, 0), - // child: Obx(() { - // final isEmpty = repairController.repairHistory.value.isEmpty; - // if (isEmpty) { - // return Expanded(child: NullDataWidget()); - // } - // return SingleChildScrollView( - // child: Column( - // mainAxisSize: MainAxisSize.max, - // children: repairController.repairHistory.value - // .map((item) => RepairHistoryInfoWidget( - // data: item)) // 假设组件支持传 data - // .toList() - // .divide(SizedBox(height: 25.rpx)) - // .addToEnd(SizedBox(height: 25.rpx)), - // ), - // ); - // }), child: Column( children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB( - 0.rpx, 0.rpx, 0.rpx, 120.rpx), + 0.rpx, 0.rpx, 0.rpx, 26.rpx), child: ClickableContainer( backgroundColor: themeController.currentColor.sc5, highlightColor: @@ -294,6 +259,14 @@ class _MessageReviewPageState extends State { ), ), ), + Expanded( + child: Obx(() { + final list = messageReviewController.messageList.value; + return list.isEmpty + ? const NullDataWidget() + : _buildMessageListView(list); + }), + ), ], ), ), @@ -305,14 +278,76 @@ class _MessageReviewPageState extends State { } Future loadData() async { - String serviceAddress = ServiceConstant.service_address; - String serviceName = ServiceConstant.server_service; - String serviceApi = ServiceConstant.submit_repair; - String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; - ApiResponse apiResponse = await requestWithLog( - logTitle: "查询报修数据", method: MyHttpMethod.get, queryUrl: queryUrl); - RepairController repairController = Get.find(); - repairController.repairHistory.value = apiResponse.data; - repairController.updateAll(); + //todo 请求历史体征数据 + // String serviceAddress = ServiceConstant.service_address; + // String serviceName = ServiceConstant.server_service; + // String serviceApi = ServiceConstant.submit_repair; + // String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; + // ApiResponse apiResponse = await requestWithLog( + // logTitle: "查询报修数据", method: MyHttpMethod.get, queryUrl: queryUrl); + // RepairController repairController = Get.find(); + // repairController.repairHistory.value = apiResponse.data; + // repairController.updateAll(); + messageReviewController.messageList.value = [ + { + "data": { + "title": "实时监测结果通知", + 'val': [ + {'k': '消息类型', 'v': '心率异常'}, + {'k': '检测数值', 'v': '106'}, + {'k': '发生时间', 'v': '2024-07-30 01:15'}, + ], + } + }, + { + "data": { + "title": "实时监测结果通知", + 'val': [ + {'k': '消息类型', 'v': '心率异常'}, + {'k': '检测数值', 'v': '106'}, + {'k': '发生时间', 'v': '2024-07-30 01:15'}, + ], + } + }, + { + "data": { + "title": "实时监测结果通知", + 'val': [ + {'k': '消息类型', 'v': '心率异常'}, + {'k': '检测数值', 'v': '106'}, + {'k': '发生时间', 'v': '2024-07-30 01:15'}, + ], + } + }, + { + "data": { + "title": "实时监测结果通知", + 'val': [ + {'k': '消息类型', 'v': '心率异常'}, + {'k': '检测数值', 'v': '106'}, + {'k': '发生时间', 'v': '2024-07-30 01:15'}, + ], + } + }, + ]; + } + + Widget _buildMessageListView(List dataList) { + return Container( + width: double.infinity, + padding: EdgeInsets.symmetric(horizontal: 0.rpx), + child: SingleChildScrollView( + child: Column( + children: [ + SizedBox(height: 30.rpx), + ...dataList + .map((item) => ReviewMessageWidgetWidget(data: item)) + .toList() + .divide(SizedBox(height: 30.rpx)), + SizedBox(height: 30.rpx), + ], + ), + ), + ); } }