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/component/tool/NewTopSlideNotification.dart'; import 'package:vbvs_app/controller/device/device_share_controller.dart'; import 'package:vbvs_app/controller/device/device_type_controller.dart'; import 'package:vbvs_app/controller/message/message_controller.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:EasyDartModule/EasyDartModule.dart' as edm; class HealthReportCardWidget extends StatefulWidget { final data; const HealthReportCardWidget({super.key, required this.data}); @override State createState() => _HealthReportCardWidgetState(); } class _HealthReportCardWidgetState extends State { ThemeController themeController = Get.find(); MessageController messageController = Get.find(); DeviceShareController deviceShareController = Get.find(); @override Widget build(BuildContext context) { var reportData = widget.data; return ClickableContainer( backgroundColor: themeController.currentColor.sc5, highlightColor: themeController.currentColor.sc21, borderRadius: 20.rpx, padding: EdgeInsetsDirectional.fromSTEB(31.rpx, 30.rpx, 31.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( // reportData['name'] ?? '健康报告', // style: TextStyle( // fontFamily: 'Inter', // fontSize: 30.rpx, // letterSpacing: 0.0, // color: themeController.currentColor.sc3, // ), // ), // ), // ), Row( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ // 左侧标签列 Container( constraints: BoxConstraints( minWidth: 30.rpx, maxWidth: 140.rpx, ), child: Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildInfoItem(context, '姓名'.tr), _buildInfoItem(context, '设备ID'.tr), _buildInfoItem(context, '快检得分'.tr), _buildInfoItem(context, '创建时间'.tr), ], ), ), // 右侧数值列 Expanded( child: Container( constraints: BoxConstraints( minWidth: 30.rpx, ), child: Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildValueItem(context, reportData['name'] ?? '--'), _buildValueItem(context, reportData['mac'] ?? '--'), _buildValueItem( context, '${reportData['score'] ?? '--'}分'), _buildValueRowWithButton( context, _formatTime(reportData['create_time']), onViewTap: () async { // 查看按钮点击事件 edm.EasyDartModule.logger.info("快检报告查看按钮点击"); String ID = reportData['id']; DeviceTypeController deviceTypeController = Get.find(); Map data = { 'id': ID, 'mac': reportData['mac'], }; // await deviceTypeController.getCheckHistory( // id: ID, mac: reportData['mac']); // if (Get.currentRoute != '/healthExperienceHistory') // return; // if (deviceTypeController.currentCq.value == null || // deviceTypeController.currentCq.value.isEmpty) { // NewTopSlideNotification.show( // text: "未找到快检报告".tr, // textColor: themeController.currentColor.sc9); // return; // } // _onViewReport(deviceTypeController.currentCq.value); Get.toNamed('/healthQuickCheckReportPage', arguments: data); }, ), ], ), ), ), ].divide(SizedBox(width: 35.rpx)), ), ], ), ); } Widget _buildInfoItem(BuildContext context, label) { return Container( constraints: BoxConstraints( minHeight: 62.rpx, ), child: Align( alignment: AlignmentDirectional(-1, 0), child: Text( overflow: TextOverflow.ellipsis, maxLines: 1, "$label", style: TextStyle( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ), ); } Widget _buildValueItem(BuildContext context, value) { return Container( constraints: BoxConstraints( minHeight: 62.rpx, ), child: Align( alignment: AlignmentDirectional(-1, 0), child: Text( overflow: TextOverflow.ellipsis, maxLines: 1, "$value", style: TextStyle( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ), ); } // 创建时间行,包含时间和查看按钮 Widget _buildValueRowWithButton(BuildContext context, String value, {required VoidCallback onViewTap}) { return Container( constraints: BoxConstraints( minHeight: 62.rpx, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( overflow: TextOverflow.ellipsis, maxLines: 1, value, style: TextStyle( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ), // 查看按钮 ClickableContainer( onTap: onViewTap, borderRadius: 50.rpx, padding: EdgeInsets.symmetric( horizontal: 26.rpx, vertical: 6.rpx, ), backgroundColor: themeController.currentColor.sc2, highlightColor: Colors.transparent, child: Text( '查看', style: TextStyle( fontFamily: 'Inter', fontSize: 24.rpx, color: Colors.white, ), ), ), ], ), ); } // 查看报告的方法 void _onViewReport(Map reportData) { // TODO: 实现查看报告详情的逻辑 // 可以根据需要跳转到报告详情页面 print('查看报告: ${reportData['_id']}'); // 示例:Get.to(() => ReportDetailPage(reportId: reportData['_id'])); try { Get.toNamed('/healthQuickCheckReportPage', arguments: reportData); } catch (e) { edm.EasyDartModule.logger.error("快检报告页面加载失败---?${e.toString()}"); } } // 格式化时间戳 String _formatTime(dynamic timestamp) { if (timestamp == null) return '--'; try { // 假设时间戳是毫秒级 DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp); // 格式化为:年/月/日 时:分 return "${dateTime.year}/${dateTime.month.toString().padLeft(2, '0')}/${dateTime.day.toString().padLeft(2, '0')} ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}"; } catch (e) { return '--'; } } }