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'; 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 { // 查看按钮点击事件 String ID = reportData['id']; DeviceTypeController deviceTypeController = Get.find(); await deviceTypeController.getCheckHistory(id: ID); if (deviceTypeController.currentCq.value == null || deviceTypeController.currentCq.value.isEmpty) { NewTopSlideNotification.show( text: "未找到快检报告".tr, textColor: themeController.currentColor.sc9); return; } _onViewReport(deviceTypeController.currentCq.value); }, ), ], ), ), ), ].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'])); Get.toNamed('/healthQuickCheckReportPage', arguments: reportData); } // 格式化时间戳 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 '--'; } } }