250 lines
8.7 KiB
Dart
250 lines
8.7 KiB
Dart
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<HealthReportCardWidget> createState() => _HealthReportCardWidgetState();
|
||
}
|
||
|
||
class _HealthReportCardWidgetState extends State<HealthReportCardWidget> {
|
||
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 '--';
|
||
}
|
||
}
|
||
}
|