import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:vitalapp/components/dialog_ecg_image.dart'; import 'package:vnote_device_plugin/models/exams/twelve_heart.dart'; import '../pages/medical/widgets/twelve_ecg_view/widgets/conclusion_dialog.dart'; import 'alert_dialog.dart'; class VDialogTable extends StatelessWidget { final bool? isExistLocalData; const VDialogTable({ super.key, this.title, required this.columnNames, required this.tableData, this.diagnosisTime, this.isExistLocalData = false, }); final List> tableData; final List columnNames; final String? title; final String? diagnosisTime; Future show() => VAlertDialog.showDialog(this); @override Widget build(BuildContext context) { return VAlertDialog( width: 800, contentPadding: const EdgeInsets.only(left: 16, right: 8), content: _buildTable(), showCancel: true, ); } Widget _buildTable() { return SizedBox( height: 500, child: Column( children: [ const SizedBox( height: 10, ), if (title != null) Text( title!, style: const TextStyle( fontSize: 22, ), ), const SizedBox( height: 10, ), Table( children: [ TableRow( decoration: const BoxDecoration( color: Color.fromRGBO(215, 234, 255, 1), ), children: columnNames .map((columnName) => _buildHeaderCell(columnName)) .toList(), ), ], ), Expanded( child: Scrollbar( thumbVisibility: true, child: SingleChildScrollView( child: Table( children: _buildRow(tableData), ), ), ), ), const SizedBox( height: 10, ), Container( alignment: Alignment.centerLeft, child: Text( "检测时间:${diagnosisTime ?? ''}", style: const TextStyle(fontSize: 18), )), const SizedBox( height: 10, ), Container( alignment: Alignment.centerLeft, child: const Text( '注:本结果仅对该检验样本负责!', style: TextStyle(fontSize: 18), )) ], ), ); } List _buildRow(List> tableData) { var tableRows = []; for (var i = 0; i < tableData.length; i++) { final rowData = tableData[i]; final label = rowData[1]; tableRows.add( TableRow( decoration: i % 2 == 0 ? null : const BoxDecoration( color: Color.fromRGBO(233, 244, 255, 1), ), children: tableData[i].map( (cellData) { if (label == '心电测量') { return _buildImageDataCell(cellData); } else if (label == '十二导心电图') { return _buildImageDataCell(cellData); } else if (label == '十二导分析结果') { return _buildEcg12DataCell(cellData); } return _buildDataCell(cellData); }, ).toList(), ), ); } return tableRows; } TableCell _buildHeaderCell(String title) { return TableCell( child: Container( padding: const EdgeInsets.symmetric(horizontal: 14), alignment: Alignment.centerLeft, height: 37, child: Text( title, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), ), ); } String _replaceSemicolon(String input) { String result = input; if (result.endsWith(';')) { result = result.replaceAll(';', ''); } else { result = result.replaceAll(';', '、'); } return result; } TableCell _buildDataCell(String title) { if (title.contains(";")) { title = _replaceSemicolon(title); } return TableCell( child: Container( padding: const EdgeInsets.symmetric(horizontal: 14), alignment: Alignment.centerLeft, height: 37, child: Text( title, style: const TextStyle(fontSize: 14), ), ), ); } TableCell _buildImageDataCell(String title) { if (title.length > 50) { Uint8List imageBytes = isExistLocalData! ? base64.decode(title) : base64.decode( "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="); return TableCell( child: InkWell( onTap: () { print(title); Get.dialog( EcgImageDialog( image: isExistLocalData! ? Image.memory( imageBytes, fit: BoxFit.cover, // 根据需要设置适当的fit属性 ) : Image.network(title), ), ); }, child: Container( padding: const EdgeInsets.symmetric(horizontal: 14), alignment: Alignment.centerLeft, height: 57, child: isExistLocalData! ? Image.memory( imageBytes, ) : Image.network(title), ), ), ); } return TableCell( child: Container( padding: const EdgeInsets.symmetric(horizontal: 14), alignment: Alignment.centerLeft, height: 37, child: Text( title, style: const TextStyle(fontSize: 14), ), ), ); } /// 12导心电的结果 TableCell _buildEcg12DataCell(String value) { if (value.contains("advice")) { return TableCell( child: InkWell( onTap: () async { TwelveHeartResultEntity resultConclusion = TwelveHeartResultEntity.fromJson(jsonDecode(value)); await ConclusionDialog.show(twelveHeartResult: resultConclusion); }, child: Container( padding: const EdgeInsets.symmetric(horizontal: 14), alignment: Alignment.centerLeft, height: 57, child: const Text( "点击查看结果", style: TextStyle( color: Colors.blue, ), ), ), ), ); } return TableCell( child: Container( padding: const EdgeInsets.symmetric(horizontal: 14), alignment: Alignment.centerLeft, height: 57, child: Text( value, style: const TextStyle(fontSize: 14), ), ), ); } }