import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/controller/device/device_share_controller.dart'; import 'package:vbvs_app/controller/mh_controller/message_controller.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/enum/MessageStatus.dart'; class MhMessageListWidget extends StatefulWidget { final data; const MhMessageListWidget({super.key, required this.data}); @override State createState() => _MhMessageListWidgetState(); } class _MhMessageListWidgetState extends State { ThemeController themeController = Get.find(); DeviceShareController deviceShareController = Get.find(); MhMessageController messageController = Get.find(); late RxMap messageInfo; @override Widget build(BuildContext context) { messageInfo = Map.from(widget.data).obs; print(messageInfo); return Stack( children: [ ClickableContainer( backgroundColor: Color(0xFF003058), highlightColor: Color(0xFF055466), borderRadius: 20.rpx, padding: EdgeInsetsDirectional.fromSTEB(30.rpx, 26.rpx, 30.rpx, 26.rpx), onTap: () async { messageController.updateMessageReadStatus( context, messageInfo['type'], mid: messageInfo['_id']); }, child: Column( mainAxisSize: MainAxisSize.max, children: [ Container( width: double.infinity, constraints: BoxConstraints( minHeight: 60.rpx, ), child: Align( alignment: AlignmentDirectional(-1, 0), child: Text( // '实时监测结果通知'.tr, "${messageInfo['data']['title']}", style: TextStyle( fontFamily: 'Inter', fontSize: 30.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ), ), Row(mainAxisSize: MainAxisSize.max, children: [ Container( constraints: BoxConstraints( minWidth: 60.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: 60.rpx, ), child: Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: messageInfo['data']['val'] .map((mapItem) => _buildValueItem(context, mapItem['v'] ?? '')) .toList(), ), ), ]), if (messageInfo['type'] == 'app_system') Padding( padding: EdgeInsets.only(top: 28.rpx), child: Container( height: 60.rpx, child: CustomCard( borderRadius: 16.rpx, // 直角 gradientDirection: GradientDirection.vertical, colors: [Color(0xFF84F5FF)], enableAnimation: true, // 有点击缩放动画 enableGradient: false, // 不用渐变 onTap: () async { await messageController.updateMessageReadStatus( context, messageInfo['type'], mid: messageInfo['_id']); // await messageController.getMessageList(); Get.toNamed('/messageDetail', arguments: messageInfo); }, child: Center( child: Text( // getMessageStatus(messageInfo['status']), "查看详情".tr, style: TextStyle( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: Color(0xFF011D33), ), ), ), ), ), ) ], ), ), Obx(() { final info = messageInfo.value; final readTime = info['read_time']; final shouldShowDot = readTime == null || readTime.toString().isEmpty; return shouldShowDot ? Positioned( top: 30.rpx, right: 30.rpx, child: Container( width: 15.rpx, height: 15.rpx, alignment: Alignment.center, decoration: BoxDecoration( color: Colors.red, shape: BoxShape.circle, ), ), ) : SizedBox.shrink(); }) ], ); } Widget _buildInfoItem(BuildContext context, String label) { return Container( constraints: BoxConstraints(minHeight: 60.rpx, maxHeight: 60.rpx), child: Align( alignment: AlignmentDirectional(-1, 0), child: Text( label.tr, // overflow: TextOverflow.ellipsis, maxLines: 2, style: TextStyle( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, height: 1, color: themeController.currentColor.sc4, ), ), ), ); } Widget _buildValueItem(BuildContext context, value) { return Container( constraints: BoxConstraints(minHeight: 60.rpx, maxHeight: 60.rpx), child: Align( alignment: AlignmentDirectional(-1, 0), child: Text( "${value}", // overflow: TextOverflow.ellipsis, maxLines: 2, style: TextStyle( 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; } }