WD: Styling and desgin changes of vital signs values

dev_v3.13.6_vital_sign
taha.alam 1 year ago
parent e518bf5a0f
commit ee0b5b6e43

@ -2194,4 +2194,13 @@ const Map localizedValues = {
"moderatelyHigh": {"en": "Moderately high", "ar": "مرتفع بشكل معتدل"},
"possiblyLow": {"en": "Possibly low", "ar": "ربما منخفض"},
"slightylyHigh": {"en": "Slightly high", "ar": "مرتفع قليلا"},
'frameRate': {'ar': 'معدل الإطارات', 'en': 'FrameRate'},
'movement': {'ar': 'الحركة', 'en': 'Movement'},
'centered': {'ar': 'مركّز', 'en': 'Centered'},
'lighting': {'ar': 'الإضاءة', 'en': 'Lighting'},
'scanningConditions': {'ar': 'شروط المسح', 'en': 'Scanning Conditions'},
'serverReady': {'ar': 'الخادم جاهز', 'en': 'Server Ready'},
'analyzingData': {'ar': 'تحليل البيانات...', 'en': 'Analyzing Data...'},
'collectingData': {'ar': 'جمع البيانات...', 'en': 'Collecting Data...'},
'waitingData': {'ar': 'انتظار البيانات...', 'en': 'Waiting Data...'},
};

@ -3056,10 +3056,33 @@ class TranslationBase {
String get oxygenSaturation => localizedValues["oxygenSaturation"][locale.languageCode];
String get stress => localizedValues["stress"][locale.languageCode];
String get respiratoryRate => localizedValues["respiratoryRate"][locale.languageCode];
String get BMI => localizedValues["respiratoryRate"][locale.languageCode];
String get BMI => localizedValues["bmi"][locale.languageCode];
String get generalWellness => localizedValues["generalWellness"][locale.languageCode];
String get cvd => localizedValues["cvd"][locale.languageCode];
String get frameRate => localizedValues['frameRate'][locale.languageCode];
String get movement => localizedValues['movement'][locale.languageCode];
String get centered => localizedValues['centered'][locale.languageCode];
String get lighting => localizedValues['lighting'][locale.languageCode];
String get scanningConditions =>
localizedValues['scanningConditions'][locale.languageCode];
String get serverReady => localizedValues['serverReady'][locale.languageCode];
String get analyzingData =>
localizedValues['analyzingData']?[locale.languageCode] ?? '';
String get collectingData =>
localizedValues['collectingData']?[locale.languageCode] ?? '';
String get waitingData =>
localizedValues['waitingData']?[locale.languageCode] ?? '';
String getValue(String name) {
switch (name) {
case 'normal':
@ -3082,6 +3105,10 @@ class TranslationBase {
return possiblyLow;
case 'moderatelyHigh':
return moderatelyHigh;
case 'systolic-lng':
return systolicLng;
case 'diastolic-lng':
return diastolicLng;
default:
throw ArgumentError('Invalid name: $name');
}

@ -1,6 +1,8 @@
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import 'scan_condition.dart';
class ScanConditionChecklist extends StatelessWidget {
@ -17,7 +19,7 @@ class ScanConditionChecklist extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SizedBox(
height: deviceSize.width*0.35,
height: deviceSize.width * 0.4,
child: Material(
color:Colors.white,
child: Padding(
@ -25,8 +27,8 @@ class ScanConditionChecklist extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"Scanning Conditions",
Text(
TranslationBase.of(context).scanningConditions,
style: TextStyle(
fontSize: 15,
color: CustomColors.accentColor,
@ -41,15 +43,18 @@ class ScanConditionChecklist extends StatelessWidget {
child: Column(
children: [
ScanCondition(
scanConditionName: "Lighting",
scanConditionName:
TranslationBase.of(context).lighting,
isConditionSatisfied: conditions.lighting,
),
ScanCondition(
scanConditionName: "Distance",
scanConditionName:
TranslationBase.of(context).distance,
isConditionSatisfied: conditions.distance,
),
ScanCondition(
scanConditionName: "Centered",
scanConditionName:
TranslationBase.of(context).centered,
isConditionSatisfied: conditions.centered,
),
],
@ -60,15 +65,18 @@ class ScanConditionChecklist extends StatelessWidget {
child: Column(
children: [
ScanCondition(
scanConditionName: "Movement",
scanConditionName:
TranslationBase.of(context).movement,
isConditionSatisfied: conditions.movement,
),
ScanCondition(
scanConditionName: "FrameRate",
scanConditionName:
TranslationBase.of(context).frameRate,
isConditionSatisfied: conditions.frameRate,
),
ScanCondition(
scanConditionName: "Server Ready",
scanConditionName:
TranslationBase.of(context).serverReady,
isConditionSatisfied: conditions.serverReady,
),
],

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
@ -25,7 +26,7 @@ class ScanStatus extends StatelessWidget {
),
),
Text(
getScanStage(),
getScanStage(context),
style: const TextStyle(
fontSize: 16,
color: Colors.white,
@ -37,13 +38,13 @@ class ScanStatus extends StatelessWidget {
);
}
String getScanStage() {
String getScanStage(context) {
if (stage == GetHealthStage.waitingData) {
return 'Waiting Data...';
return TranslationBase.of(context).waitingData;
} else if (stage == GetHealthStage.collectingData) {
return 'Collecting Data...';
return TranslationBase.of(context).collectingData;
} else if (stage == GetHealthStage.analyzingData) {
return 'Analyzing Data...';
return TranslationBase.of(context).analyzingData;
}
return ''; // idle
}

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
class StartButton extends StatelessWidget {
@ -25,8 +26,8 @@ class StartButton extends StatelessWidget {
backgroundColor: (disabled) ? Colors.grey : CustomColors.accentColor,
elevation: 8,
),
child: const Text(
"START",
child: Text(
TranslationBase.of(context).start,
style: TextStyle(
fontSize: 14,
),

@ -1,7 +1,5 @@
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/vital_signs/data/vitals_benchmark.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
@ -9,7 +7,9 @@ class VitalSignWidget extends StatelessWidget {
final String vitalSignName;
final String vitalSignValue;
final String vectorUrl;
final RangeConditionWithTitle condition;
final dynamic condition;
final Map<String, dynamic>? lookupValues;
final Map<String, dynamic>? bloodPressureValues;
final Color? textColor;
const VitalSignWidget({
@ -19,6 +19,8 @@ class VitalSignWidget extends StatelessWidget {
this.textColor,
required this.condition,
required this.vectorUrl,
this.lookupValues,
this.bloodPressureValues,
}) : super(key: key);
@override
@ -70,10 +72,13 @@ class VitalSignWidget extends StatelessWidget {
SizedBox(
width: 8,
),
Status(
if (lookupValues != null)
Status(
status:
"${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}")
"${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}",
originalData:
condition.current?.quantitativeInterpretation ?? '',
)
// Text(
// "${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}",
// style: TextStyle(
@ -90,24 +95,95 @@ class VitalSignWidget extends StatelessWidget {
// SizedBox(
// height: 30,
// child: Row(mainAxisSize: MainAxisSize.max, children: [
// Expanded(
// flex: 1,
// child: ListView.separated(
// separatorBuilder: (_, __) => SizedBox(
// width: 8,
// ),
// scrollDirection: Axis.horizontal,
// shrinkWrap: true,
// itemCount: condition.condition?.length ?? 0,
// itemBuilder: (_, index) => RangeWidget(
// title: condition.condition?[index].title ?? 'test',
// isSelected: condition.condition?[index]
// .isInRange(vitalSignValue) ==
// true,
// ),
// ),
// ),
// ]),
if (lookupValues != null)
Flexible(
flex: 1,
child: ListView.separated(
physics: NeverScrollableScrollPhysics(),
separatorBuilder: (_, __) => SizedBox(
width: 8,
),
shrinkWrap: true,
itemCount: lookupValues?.length ?? 0,
itemBuilder: (_, index) {
var key = lookupValues?.keys.elementAt(index);
return RangeWidget(
title: key ?? '',
values: lookupValues?[key] ?? [],
isSelected: false,
);
}),
),
if (bloodPressureValues != null)
Flexible(
flex: 1,
child: ListView.separated(
separatorBuilder: (_, __) => SizedBox(
width: 8,
),
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: bloodPressureValues?.length ?? 0,
itemBuilder: (_, index) {
var key = bloodPressureValues?.keys.elementAt(index);
print(
'the ssize is ${(bloodPressureValues?[key]?.length ?? 1) * 40} ');
// return RangeWidget(
// title: key??'',
// values: lookupValues?[key]??[],isSelected: false,
// );
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
TranslationBase.of(context)
.getValue(key ?? ''),
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.black, fontSize: 16),
),
Status(
status:
"${TranslationBase.of(context).getValue(condition.getValue(key)?.quantitativeInterpretation ?? '')}",
originalData: condition
.getValue(key)
?.quantitativeInterpretation ??
'',
)
],
),
SizedBox(height: 8),
SizedBox(
height: 220,
child: ListView.separated(
separatorBuilder: (_, __) => SizedBox(
width: 8,
),
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount:
bloodPressureValues?[key]?.length ?? 0,
itemBuilder: (_, index) {
var title = bloodPressureValues?[key]
?.keys
.elementAt(index);
return RangeWidget(
title: title ?? '',
values: bloodPressureValues?[key]
?[title] ??
[],
isSelected: false,
);
}))
],
);
}),
),
// ]),
// ),
SizedBox(
height: 8,
@ -146,43 +222,102 @@ class VitalSignWidget extends StatelessWidget {
class RangeWidget extends StatelessWidget {
final String title;
final List<String> values;
final bool isSelected;
const RangeWidget({super.key, required this.title, required this.isSelected});
const RangeWidget(
{super.key,
required this.title,
required this.isSelected,
required this.values});
@override
Widget build(BuildContext context) {
return SizedBox(
height: 30,
child: Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3),
),
// color: Color(0xFF359846),
color: (isSelected)
? CustomColors.accentColor
: CustomColors.lightGreyColor,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Text(
title,
textAlign: TextAlign.center,
style: TextStyle(
color: (isSelected) ? Colors.white : Colors.black,
fontSize: 12),
return Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
SizedBox(
height: 30,
child: Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadiusDirectional.only(
topStart: Radius.circular(8),
bottomStart: Radius.circular(8),
),
),
// color: Color(0xFF359846),
color: CustomColors.lightGreyColor,
child: Padding(
padding: const EdgeInsets.only(
top: 4.0, bottom: 4, right: 8, left: 8),
child: Text(
TranslationBase.of(context).getValue(title),
textAlign: TextAlign.center,
style: TextStyle(color: Colors.black, fontSize: 12),
),
),
),
),
),
Expanded(
child: Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadiusDirectional.only(
topEnd: Radius.circular(8),
bottomEnd: Radius.circular(8),
),
),
// color: Color(0xFF359846),
color: getColor(title),
child: SizedBox(
height: 30,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: List.generate(
values.length,
(index) => Row(
children: [
Text(
values[index],
textAlign: TextAlign.center,
style:
TextStyle(color: Colors.white, fontSize: 12),
),
SizedBox(
width: 8,
)
],
),
),
),
),
)),
)
],
),
);
}
getColor(title) {
switch (title) {
case "excellent":
return Color(0xFF275b45);
case "good":
return Color(0xFF507a3d);
case "poor":
return Color(0xFFa86452);
case "atRisk":
return Color(0xFFa2494b);
}
}
}
class Status extends StatelessWidget {
final String status;
final String originalData;
const Status({super.key, required this.status});
const Status({super.key, required this.status, required this.originalData});
@override
Widget build(BuildContext context) {
@ -191,23 +326,24 @@ class Status extends StatelessWidget {
borderRadius: BorderRadius.circular(3),
),
// color: Color(0xFF359846),
color: (status.toLowerCase() == 'good' ||
status.toLowerCase() == 'excellent' ||
status.toLowerCase() == 'normal')
color: (originalData.toLowerCase() == 'good' ||
originalData.toLowerCase() == 'excellent' ||
originalData.toLowerCase() == 'normal')
? Color(0xFFD8E8DB)
: (status.toLowerCase() == 'poor' || status.toLowerCase() == 'low')
: (originalData.toLowerCase() == 'poor' ||
originalData.toLowerCase() == 'low')
? Color(0xFFD3D37E)
: Color(0x98d02127),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
child: Text(status,
style: TextStyle(
color: (status.toLowerCase() == 'good' ||
status.toLowerCase() == 'excellent' ||
status.toLowerCase() == 'normal')
color: (originalData.toLowerCase() == 'good' ||
originalData.toLowerCase() == 'excellent' ||
originalData.toLowerCase() == 'normal')
? Color(0xFF359846)
: (status.toLowerCase() == 'poor' ||
status.toLowerCase() == 'low')
: (originalData.toLowerCase() == 'poor' ||
originalData.toLowerCase() == 'low')
? Colors.white
: Colors.white,
fontSize: 8,

@ -44,17 +44,10 @@ var vital = {
},
{
"min": 10.8,
"max": 16.4,
"interpretation": "poor",
"quantitativeInterpretation": "low",
"title": "10.8-16.4"
},
{
"min": 16.4,
"max": 35.0,
"interpretation": "poor",
"quantitativeInterpretation": "low",
"title": "16.4-35.0"
"title": "10.8-16.4"
},
{
"min": 35.0,
@ -99,7 +92,7 @@ var vital = {
{
"min": 97,
"max": 100,
"interpretation": "good",
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"isMaxIncluded": true,
"title": "97-100"
@ -110,39 +103,94 @@ var vital = {
"unit": "mmHg",
"values": [
{
"min": 0,
"max": (90 / 60),
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "< 90/60"
},
{
"min": (90 / 60),
"max": (120 / 70),
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "90/60 - 120/70"
},
{
"min": (120 / 70),
"max": (130 / 80),
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "120/70 - 130/80"
},
{
"min": (130 / 80),
"max": (140 / 90),
"interpretation": "poor",
"quantitativeInterpretation": "slightlyHigh",
"title": "130/80-140/90"
},
{
"min": (140 / 90),
"max": 0,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "≥ 140/90"
"systolic-lng": {
"min": 0,
"max": 90,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "0-90",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 0,
"max": 60,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "0-60",
"heading": "diastolic-lng"
}
},
{
"systolic-lng": {
"min": 90,
"max": 120,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "90-120",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 60,
"max": 70,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "60-70",
"heading": "diastolic-lng"
}
},
{
"systolic-lng": {
"min": 120,
"max": 130,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "120-130",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 70,
"max": 80,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "70-80",
"heading": "diastolic-lng"
}
},
{
"systolic-lng": {
"min": 130,
"max": 140,
"interpretation": "poor",
"quantitativeInterpretation": "slightlyHigh",
"title": "130-140",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 80,
"max": 90,
"interpretation": "poor",
"quantitativeInterpretation": "normal",
"title": "80-90",
"heading": "diastolic-lng"
}
},
{
"systolic-lng": {
"min": 140,
"max": 0,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "140-200",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 90,
"max": 200,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "≥ 90",
"heading": "diastolic-lng"
}
}
]
},
@ -159,7 +207,7 @@ var vital = {
{
"min": 18.5,
"max": 25,
"interpretation": "poor",
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "25-30"
},{
@ -299,6 +347,103 @@ var vital = {
},
};
var vitalValues = {
"HR": {
"excellent": ["60-80"],
"poor": ["80-100"],
"atRisk": ["< 60", "≥ 100"]
},
"hrvv": {
"excellent": ["≥ 51.5"],
"good": ["35.0-51.5"],
"poor": ["10.8-16.4"],
"atRisk": ["< 10.8"]
},
"Sp02": {
"excellent": ["97-100"],
"good": ["95-97"],
"poor": ["90-95"],
"atRisk": ["≥ 90"]
},
"blood_pressure": {
"systolic-lng": {
"excellent": ["90-120"],
"good": ["120-130"],
"poor": ["130-140"],
"atRisk": ["0-90", "140-200"]
},
"diastolic-lng": {
"excellent": ["60-70"],
"good": ["70-80"],
"poor": ["80-90"],
"atRisk": ["0-60", "≥ 90"]
}
},
// "bmi": {
// "unit": "",
// "values": [
// {
// "min": 0,
// "max": 18.5,
// "interpretation": "poor",
// "quantitativeInterpretation": "normal",
// "title": "< 18.5"
// },
// {
// "min": 18.5,
// "max": 25,
// "interpretation": "excellent",
// "quantitativeInterpretation": "normal",
// "title": "25-30"
// },{
// "min": 25,
// "max": 30,
// "interpretation": "poor",
// "quantitativeInterpretation": "normal",
// "title": "25-30"
// },
// {
// "min": 30,
// "max": 40,
// "interpretation": "atRisk",
// "quantitativeInterpretation": "high",
// "title": "30-40"
// },
// {
// "min": 40,
// "max": 0,
// "interpretation": "atRisk",
// "quantitativeInterpretation": "high",
// "title": "≥40"
// },
// ]
"bmi": {
"excellent": ["18.5-25"],
"poor": ["< 18.5", "25-30"],
"atRisk": ["30-40", "≥40"],
},
"respiratoryRate": {
"excellent": ["25-30"],
"poor": ["< 12", "≥ 20"]
},
"cvd": {
"excellent": ["< 1"],
"Average": ["1-10"],
"poor": ["10-20"],
"atRisk": ["≥ 20"]
},
"generalWellness": {
"excellent": ["80-100"],
"good": ["40-80"],
"poor": ["< 40"]
},
"stressLevel": {
"excellent": ["0-2"],
"good": ["2-3"],
"poor": ["80-100"]
}
};
class RangeConditionWithTitle {
String? unit;
List<RangeCondition>? condition;
@ -316,7 +461,56 @@ class RangeConditionWithTitle {
}
}
class RangeConditionForBloodPressure {
String? unit;
List<BloodPressure>? condition;
BloodPressure? systolic;
BloodPressure? diastolic;
RangeCondition? getValue(String key) {
switch (key) {
case 'systolic-lng':
return systolic?.systolic;
case 'diastolic-lng':
return diastolic?.diastolic;
}
}
RangeConditionForBloodPressure({this.unit, this.condition});
RangeConditionForBloodPressure.fromJson(
Map<String, dynamic> json, String formatValueToTwoDp) {
this.unit = json['unit'];
var conditions = json['values'] as List?;
this.condition = conditions
?.map((item) => BloodPressure.fromJson(item, formatValueToTwoDp))
.toList();
print("the value is $formatValueToTwoDp");
systolic = condition
?.where((element) => element.systolic?.isSelected == true)
.first;
diastolic = condition
?.where((element) => element.diastolic?.isSelected == true)
.first;
}
}
class BloodPressure {
RangeCondition? systolic;
RangeCondition? diastolic;
BloodPressure.fromJson(Map<String, dynamic> json, String selectedValue) {
systolic = RangeCondition.fromJson(
json['systolic-lng'], selectedValue.split("/")[0]);
diastolic = RangeCondition.fromJson(
json['diastolic-lng'], selectedValue.split("/")[1]);
}
}
class RangeCondition {
String? heading;
double? min;
double? max;
bool? isMaxIncluded;
@ -336,6 +530,7 @@ class RangeCondition {
isMaxIncluded = json['isMaxIncluded'];
title = json['title'];
isSelected = isInRange(selectedValue);
heading = json['heading'];
}
bool isInRange(String data) {

@ -52,6 +52,7 @@ class ResultScreen extends StatelessWidget {
_holisticAnalysis?.generalWellness != null)
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['generalWellness']!,
vitalSignName:
TranslationBase.of(context).generalWellness,
condition: RangeConditionWithTitle.fromJson(
@ -70,6 +71,7 @@ class ResultScreen extends StatelessWidget {
vital['stressLevel']!,
formatValueToTwoDp(
healthResult?.vitalSigns.stress)),
lookupValues: vitalValues['stressLevel']!,
vitalSignValue:
formatValueToTwoDp(healthResult?.vitalSigns.stress),
vectorUrl: 'assets/images/svg/stress.svg',
@ -81,6 +83,7 @@ class ResultScreen extends StatelessWidget {
vital['HR']!,
formatValueToTwoDp(
healthResult?.vitalSigns.heartRate)),
lookupValues: vitalValues['HR']!,
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.heartRate),
vectorUrl: 'assets/images/svg/heartrate.svg',
@ -90,9 +93,10 @@ class ResultScreen extends StatelessWidget {
VitalSignWidget(
textColor: textColor,
vitalSignName: "Blood Pressure",
condition: RangeConditionWithTitle.fromJson(
condition: RangeConditionForBloodPressure.fromJson(
vital['blood_pressure']!,
healthResult?.vitalSigns.bloodPressure ?? ""),
bloodPressureValues: vitalValues['blood_pressure']!,
vitalSignValue:
healthResult?.vitalSigns.bloodPressure ?? "",
vectorUrl: 'assets/images/svg/bloodpressure.svg',
@ -102,6 +106,7 @@ class ResultScreen extends StatelessWidget {
vectorUrl: 'assets/images/svg/heartrate.svg',
textColor: textColor,
vitalSignName: "HRV SDNN",
lookupValues: vitalValues['hrvv']!,
condition: RangeConditionWithTitle.fromJson(
vital['hrvv']!,
formatValueToTwoDp(
@ -112,6 +117,7 @@ class ResultScreen extends StatelessWidget {
//oxygen
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['Sp02']!,
vitalSignName:
TranslationBase.of(context).oxygenSaturation,
condition: RangeConditionWithTitle.fromJson(
@ -124,6 +130,7 @@ class ResultScreen extends StatelessWidget {
if (_vitalSign?.respiratoryRate != null)
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['respiratoryRate']!,
vitalSignName:
TranslationBase.of(context).respiratoryRate,
condition: RangeConditionWithTitle.fromJson(
@ -138,6 +145,7 @@ class ResultScreen extends StatelessWidget {
_holisticAnalysis?.bmi != null)
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['bmi']!,
vitalSignName: TranslationBase.of(context).BMI,
condition: RangeConditionWithTitle.fromJson(
vital['bmi']!,

Loading…
Cancel
Save