更新消息回看功能
This commit is contained in:
35
lib/controller/message/message_review_controller.dart
Normal file
35
lib/controller/message/message_review_controller.dart
Normal file
@@ -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<String, dynamic> json) {
|
||||
try {
|
||||
return _$MessageReviewModelFromJson(json);
|
||||
} catch (e) {
|
||||
// 在实际应用中,应该有更细致的异常处理策略和错误日志
|
||||
return MessageReviewModel(); // 或者返回一个带有错误信息的特定DeviceInfoModel实例
|
||||
}
|
||||
}
|
||||
|
||||
// 序列化为JSON时的异常处理
|
||||
Map<String, dynamic> toJson() => _$MessageReviewModelToJson(this);
|
||||
}
|
||||
|
||||
class MessageReviewController extends GetControllerEx<MessageReviewModel> {
|
||||
MessageReviewModel() {
|
||||
attr = GetModel(MessageReviewModel()).obs;
|
||||
}
|
||||
|
||||
RxList messageList = [].obs;
|
||||
|
||||
|
||||
}
|
||||
15
lib/controller/message/message_review_controller.g.dart
Normal file
15
lib/controller/message/message_review_controller.g.dart
Normal file
@@ -0,0 +1,15 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'message_review_controller.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
MessageReviewModel _$MessageReviewModelFromJson(Map<String, dynamic> json) =>
|
||||
MessageReviewModel()..type = (json['type'] as num?)?.toInt();
|
||||
|
||||
Map<String, dynamic> _$MessageReviewModelToJson(MessageReviewModel instance) =>
|
||||
<String, dynamic>{
|
||||
'type': instance.type,
|
||||
};
|
||||
@@ -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()),
|
||||
]));
|
||||
});
|
||||
}
|
||||
|
||||
156
lib/pages/device/component/ReviewMessageWidgetWidget.dart
Normal file
156
lib/pages/device/component/ReviewMessageWidgetWidget.dart
Normal file
@@ -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<ReviewMessageWidgetWidget> createState() =>
|
||||
_ReviewMessageWidgetWidgetState();
|
||||
}
|
||||
|
||||
class _ReviewMessageWidgetWidgetState extends State<ReviewMessageWidgetWidget> {
|
||||
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<Widget>((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<Widget>((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;
|
||||
}
|
||||
}
|
||||
@@ -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<MessageReviewPage> {
|
||||
RepairController repairController = Get.find();
|
||||
MessageReviewController messageReviewController = Get.find();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -76,21 +73,6 @@ class _MessageReviewPageState extends State<MessageReviewPage> {
|
||||
// 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<MessageReviewPage> {
|
||||
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<MessageReviewPage> {
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Obx(() {
|
||||
final list = messageReviewController.messageList.value;
|
||||
return list.isEmpty
|
||||
? const NullDataWidget()
|
||||
: _buildMessageListView(list);
|
||||
}),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -305,14 +278,76 @@ class _MessageReviewPageState extends State<MessageReviewPage> {
|
||||
}
|
||||
|
||||
Future<void> 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),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user