You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
diplomatic-quarter/lib/vital_signs/components/health_result_widget.dart

223 lines
11 KiB
Dart

import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import 'vital_sign_widget.dart';
class HealthResultWidget extends StatelessWidget {
final Size deviceSize;
final void Function() onTap;
final Health? healthResult;
late final VitalSign? _vitalSign;
late final HolisticAnalysis? _holisticAnalysis;
late final CardiovascularRisks? _cardiovascularRisks;
late final CovidRisk? _covidRisk;
late final ScanParameters? _scanParameters;
HealthResultWidget({
Key? key,
required this.deviceSize,
required this.onTap,
required this.healthResult,
}) : super(key: key) {
_vitalSign = healthResult?.vitalSigns;
_holisticAnalysis = healthResult?.holisticHealth;
_cardiovascularRisks = healthResult?.risks?.cardiovascularRisks;
_covidRisk = healthResult?.risks?.covidRisk;
_scanParameters = healthResult?.scanParameters;
}
@override
Widget build(BuildContext context) {
return Positioned(
top: deviceSize.height * 0.07,
left: deviceSize.width * 0.05,
child: GestureDetector(
onTap: onTap,
child: SizedBox(
width: deviceSize.width * 0.9,
child: Container(
color: Colors.black38,
child: Padding(
padding: const EdgeInsets.all(15),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: const EdgeInsets.fromLTRB(0, 0, 0, 10),
child: const Text(
"Vital Signs",
style: TextStyle(
fontSize: 15,
color: Colors.amber,
fontWeight: FontWeight.bold,
),
),
),
VitalSignWidget(
vitalSignName: "Heart Rate",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.heartRate)),
VitalSignWidget(
vitalSignName: "SPO2",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.spo2)),
VitalSignWidget(
vitalSignName: "IBI",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.ibi)),
if (_vitalSign?.stress != null)
VitalSignWidget(
vitalSignName: "Stress",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.stress)),
if (_vitalSign?.respiratoryRate != null)
VitalSignWidget(
vitalSignName: "Respiratory Rate",
vitalSignValue: formatValueToTwoDp(
healthResult
?.vitalSigns.respiratoryRate)),
if (_vitalSign?.hrvRmssd != null)
VitalSignWidget(
vitalSignName: "HRV RMSSD",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.hrvRmssd)),
if (_vitalSign?.hrvSdnn != null)
VitalSignWidget(
vitalSignName: "HRV SDNN",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.hrvSdnn)),
if (_vitalSign?.temperature != null)
VitalSignWidget(
vitalSignName: "Temperature",
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.temperature)),
if (_vitalSign?.bloodPressure != null)
VitalSignWidget(
vitalSignName: "Blood Pressure",
vitalSignValue:
healthResult?.vitalSigns.bloodPressure ??
""),
if (_vitalSign?.bloodPressureSystolic != null)
VitalSignWidget(
vitalSignName: "Blood Pressure Systolic",
vitalSignValue: formatValueToTwoDp(
healthResult
?.vitalSigns.bloodPressureSystolic)),
if (_vitalSign?.bloodPressureDiastolic != null)
VitalSignWidget(
vitalSignName: "Blood Pressure Diastolic",
vitalSignValue: formatValueToTwoDp(
healthResult
?.vitalSigns.bloodPressureDiastolic)),
if (_holisticAnalysis != null)
Container(
margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
child: const Text(
"Holistic Analysis",
style: TextStyle(
fontSize: 15,
color: Colors.amber,
fontWeight: FontWeight.bold,
),
),
),
if (_holisticAnalysis != null &&
_holisticAnalysis?.bmi != null)
VitalSignWidget(
vitalSignName: "BMI",
vitalSignValue: formatValueToTwoDp(
healthResult?.holisticHealth?.bmi)),
if (_holisticAnalysis != null &&
_holisticAnalysis?.generalWellness != null)
VitalSignWidget(
vitalSignName: "General Wellness",
vitalSignValue: formatValueToTwoDp(
healthResult
?.holisticHealth?.generalWellness)),
if (_cardiovascularRisks != null)
Container(
margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
child: const Text(
"Cardiovascular Risks",
style: TextStyle(
fontSize: 15,
color: Colors.amber,
fontWeight: FontWeight.bold,
),
),
),
if (_cardiovascularRisks != null)
VitalSignWidget(
vitalSignName: "General",
vitalSignValue: formatValueToTwoDp(
healthResult?.risks?.cardiovascularRisks
?.generalRisk)),
if (_cardiovascularRisks != null)
VitalSignWidget(
vitalSignName: "Congestive Heart Failure",
vitalSignValue: formatValueToTwoDp(
healthResult?.risks?.cardiovascularRisks
?.congestiveHeartFailure)),
if (_cardiovascularRisks != null)
VitalSignWidget(
vitalSignName: "Coronary Heart Disease",
vitalSignValue: formatValueToTwoDp(
healthResult?.risks?.cardiovascularRisks
?.coronaryHeartDisease)),
if (_cardiovascularRisks != null)
VitalSignWidget(
vitalSignName: "Intermittent Claudication",
vitalSignValue: formatValueToTwoDp(
healthResult?.risks?.cardiovascularRisks
?.intermittentClaudication)),
if (_cardiovascularRisks != null)
VitalSignWidget(
vitalSignName: "Stroke",
vitalSignValue: formatValueToTwoDp(
healthResult?.risks?.cardiovascularRisks
?.stroke)),
if (_covidRisk != null)
Container(
margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
child: const Text(
"Covid Risks",
style: TextStyle(
fontSize: 15,
color: Colors.amber,
fontWeight: FontWeight.bold,
),
),
),
if (_covidRisk != null)
VitalSignWidget(
vitalSignName: "Risk",
vitalSignValue: formatValueToTwoDp(
healthResult
?.risks?.covidRisk?.covidRisk)),
if (_scanParameters != null)
Container(
margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
child: const Text(
"Scan Parameters",
style: TextStyle(
fontSize: 15,
color: Colors.amber,
fontWeight: FontWeight.bold,
),
),
),
if (_scanParameters != null)
VitalSignWidget(
vitalSignName: "Signal Quality",
vitalSignValue: formatValueToTwoDp(
healthResult
?.scanParameters?.signalQuality)),
])))),
));
}
String formatValueToTwoDp(double? value) {
return (value != null) ? value.toStringAsFixed(2) : "";
}
}