Merge branch 'dev_v3.13.6_CS_V2' of http://34.17.52.180/Haroon6138/diplomatic-quarter into dev_v3.13.6_CS_V2

# Conflicts:
#	lib/vital_signs/components/vital_sign_widget.dart
#	lib/vital_signs/vital_sign.dart
dev_v3.13.6_CS_V2
taha.alam 1 year ago
commit a6c58372c2

@ -255,6 +255,7 @@ class _InPatientPendingAdvancePaymentState extends State<InPatientPendingAdvance
int clinicID = projectViewModel.isPatientAdmitted ? projectViewModel.getAdmissionInfoResponseModel.clinicID! : 17; int clinicID = projectViewModel.isPatientAdmitted ? projectViewModel.getAdmissionInfoResponseModel.clinicID! : 17;
service service
.getInPatientPaymentLink( .getInPatientPaymentLink(
widget.inPatientAdvanceResponseModel.responseInpatientAdvanceInfo![0].paymentRequestID!,
projectViewModel.inPatientProjectID, projectViewModel.inPatientProjectID,
// projectViewModel.getAdmissionInfoResponseModel.admissionNo!, // projectViewModel.getAdmissionInfoResponseModel.admissionNo!,
projectViewModel.isPatientAdmitted ? projectViewModel.getAdmissionInfoResponseModel.admissionRequestNo! : projectViewModel.getAdmissionRequestInfoResponseModel.admissionRequestNo!, projectViewModel.isPatientAdmitted ? projectViewModel.getAdmissionInfoResponseModel.admissionRequestNo! : projectViewModel.getAdmissionRequestInfoResponseModel.admissionRequestNo!,

@ -472,7 +472,7 @@ class _CallScreenState extends State<CallScreen> {
], ],
), ),
); );
if (errorType == Errors.SessionJoinFailed || errorType == Errors.SessionDisconnecting) { if (errorType == Errors.SessionJoinFailed || errorType == Errors.SessionDisconncting) {
Timer( Timer(
const Duration(milliseconds: 1000), const Duration(milliseconds: 1000),
() => Navigator.pop(context), () => Navigator.pop(context),

@ -9,13 +9,19 @@ import 'package:diplomaticquarterapp/pages/conference/zoom/call_screen.dart';
import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/vital_signs/vital_sign.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import 'fragments/home_page_fragment2.dart'; import 'fragments/home_page_fragment2.dart';
import 'landing_page_pharmcy.dart'; import 'landing_page_pharmcy.dart';
@ -34,6 +40,12 @@ class _HomePageState2 extends State<HomePage2> {
PharmacyModuleViewModel pharmacyModuleViewModel = locator<PharmacyModuleViewModel>(); PharmacyModuleViewModel pharmacyModuleViewModel = locator<PharmacyModuleViewModel>();
late ProjectViewModel projectViewModel; late ProjectViewModel projectViewModel;
TextEditingController weightTextController = new TextEditingController();
TextEditingController heightTextController = new TextEditingController();
TextEditingController ageTextController = new TextEditingController();
String radioValue = "";
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -45,37 +57,146 @@ class _HomePageState2 extends State<HomePage2> {
return BaseView<DashboardViewModel>( return BaseView<DashboardViewModel>(
onModelReady: (model) => model.getPatientRadOrders(), onModelReady: (model) => model.getPatientRadOrders(),
builder: (_, model, wi) => Container( builder: (_, model, wi) => Scaffold(
color: CustomColors.backgroudGreyColor, resizeToAvoidBottomInset: true,
// color: CustomColors.backgroudGreyColor,
// color: Colors.yellow, // color: Colors.yellow,
child: SingleChildScrollView( // child:
physics: BouncingScrollPhysics(), // SingleChildScrollView(
// physics: BouncingScrollPhysics(),
body: SingleChildScrollView(
child: Material(
color: CustomColors.backgroudGreyColor,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
HomePageFragment2( SvgPicture.asset(
model, 'assets/images/new/cloud_logo.svg',
onLoginClick: () { width: 150,
widget.onLoginClick!(); height: 150,
// FirebaseCrashlytics.instance.crash(); ),
// Navigator.pushNamed( mHeight(16.0),
// context, Text(
// "zoom_call_page", "Contact-Less Vitals",
// arguments: CallArguments("h9qkpf02", "123", "Patient", "40", "1", false), style: TextStyle(color: Colors.black, fontSize: 22, letterSpacing: -0.68, fontWeight: FontWeight.bold),
// ); ),
mHeight(16.0),
Text(
"Select Gender:",
textAlign: TextAlign.start,
style: TextStyle(color: Colors.black, fontSize: 14, letterSpacing: -0.68, fontWeight: FontWeight.bold),
),
mHeight(8.0),
Container(
padding: EdgeInsets.only(left: 6, right: 6),
child: Row(
children: [
Flexible(
child: Row(
children: [
Radio(
value: TranslationBase.of(context).male,
groupValue: radioValue,
onChanged: (v) {
setState(() {
radioValue = v!;
});
}, },
onPharmacyClick: () { ),
// getPharmacyToken(model); Text(
Uri uri = Uri.parse(PHARMACY_REDIRECT_URL); TranslationBase.of(context).male,
launchUrl(uri, mode: LaunchMode.externalApplication); style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
fontWeight: FontWeight.w600,
),
),
],
),
),
Flexible(
child: Row(
children: [
Radio(
value: TranslationBase.of(context).female,
groupValue: radioValue,
onChanged: (v) {
setState(() {
radioValue = v!;
});
}, },
onMedicalFileClick: () { ),
widget.onMedicalFileClick!(); Text(
TranslationBase.of(context).female,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
fontWeight: FontWeight.w600,
),
),
],
),
),
],
),
),
mHeight(16.0),
inputWidget(TranslationBase.of(context).age, "0", ageTextController),
mHeight(16.0),
inputWidget(TranslationBase.of(context).weightAdd + " (kg)", "0", weightTextController),
mHeight(16.0),
inputWidget(TranslationBase.of(context).height + " (cm)", "0", heightTextController),
mHeight(16.0),
DefaultButton(
TranslationBase.of(context).start,
(ageTextController.text == "" || weightTextController.text == "" || heightTextController.text == "")
? null
: () {
final UserInfo userInfo = UserInfo(
age: double.parse(ageTextController.text),
gender: radioValue == TranslationBase.of(context).male ? Gender.male : Gender.female,
weight: double.parse(weightTextController.text),
// kg, Optional
height: double.parse(heightTextController.text),
// cm, Optional
waistCircumference: 0,
// cm Optional
userId: 'dbd13e86-47f4-4a43-85f6-cf62fa750117');
Navigator.push(context, FadePage(page: VitalSigns(userInfo: userInfo)));
}, },
) color: CustomColors.green,
disabledColor: CustomColors.grey,
),
// HomePageFragment2(
// model,
// onLoginClick: () {
// widget.onLoginClick!();
// // FirebaseCrashlytics.instance.crash();
// // Navigator.pushNamed(
// // context,
// // "zoom_call_page",
// // arguments: CallArguments("h9qkpf02", "123", "Patient", "40", "1", false),
// // );
// },
// onPharmacyClick: () {
// // getPharmacyToken(model);
// Uri uri = Uri.parse(PHARMACY_REDIRECT_URL);
// launchUrl(uri, mode: LaunchMode.externalApplication);
// },
// onMedicalFileClick: () {
// widget.onMedicalFileClick!();
// },
// )
], ],
), ),
), ),
), ),
),
// ),
),
); );
} }
@ -101,4 +222,86 @@ class _HomePageState2 extends State<HomePage2> {
navigateToCovidDriveThru() { navigateToCovidDriveThru() {
Navigator.push(context, FadePage(page: CovidDrivethruLocation())); Navigator.push(context, FadePage(page: CovidDrivethruLocation()));
} }
Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String? prefix, bool isEnable = true, bool hasSelection = false}) {
return Container(
padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Colors.white,
border: Border.all(
color: Color(0xffefefef),
width: 1,
),
),
child: InkWell(
onTap: hasSelection ? () {} : null,
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_labelText,
style: TextStyle(
fontSize: 11,
fontWeight: FontWeight.w600,
color: Color(0xff2B353E),
letterSpacing: -0.44,
),
),
TextField(
enabled: isEnable,
scrollPadding: EdgeInsets.zero,
keyboardType: TextInputType.number,
controller: _controller,
onChanged: (value) => {},
style: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff2B353E),
letterSpacing: -0.44,
),
decoration: InputDecoration(
isDense: true,
hintText: _hintText,
hintStyle: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff575757),
letterSpacing: -0.56,
),
prefixIconConstraints: BoxConstraints(minWidth: 50),
prefixIcon: prefix == null
? null
: Text(
"+" + prefix,
style: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w500,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
),
contentPadding: EdgeInsets.zero,
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
),
],
),
),
if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined),
],
),
),
);
}
} }

@ -615,20 +615,22 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
), ),
RobotIcon() RobotIcon()
])), ])),
bottomNavigationBar: BottomNavBar( // bottomNavigationBar: BottomNavBar(
changeIndex: changeCurrentTab, // changeIndex: changeCurrentTab,
index: currentTab, // index: currentTab,
), // ),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
floatingActionButton: (projectViewModel.havePrivilege(34) && currentTab == 0) floatingActionButton:
? FloatingButton( // (projectViewModel.havePrivilege(34) && currentTab == 0)
elevation: true, // ? FloatingButton(
onTap: () { // elevation: true,
changeCurrentTab(2); // onTap: () {
projectViewModel.analytics.appointment.book_appointment(); // changeCurrentTab(2);
}, // projectViewModel.analytics.appointment.book_appointment();
) // },
: null); // )
// :
null);
} }
triggerRobot() { triggerRobot() {

@ -232,7 +232,7 @@ class ServicesView extends StatelessWidget {
} else if (hmgServices.action == 1) { } else if (hmgServices.action == 1) {
openLiveCare(context); openLiveCare(context);
} else if (hmgServices.action == 111) { } else if (hmgServices.action == 111) {
Navigator.push(context, FadePage(page: VitalSigns())); // Navigator.push(context, FadePage(page: VitalSigns()));
} else if (hmgServices.action == 2) { } else if (hmgServices.action == 2) {
//todo for temporary basis //todo for temporary basis
// Navigator.push(context, FadePage(page: ResultScreen( // Navigator.push(context, FadePage(page: ResultScreen(

@ -184,11 +184,12 @@ class ClinicListService extends BaseService {
return Future.value(localRes); return Future.value(localRes);
} }
Future<Map> getInPatientPaymentLink(int projectID, int admissionNo, int orderID, String name, String email, num amount, String nationalID, int clinicID, context) async { Future<Map> getInPatientPaymentLink(int paymentRequestID, int projectID, int admissionNo, int orderID, String name, String email, num amount, String nationalID, int clinicID, context) async {
Map<String, dynamic> request; Map<String, dynamic> request;
// request = {"ProjectID": projectID, "AdmissionReqNo": admissionReqNo, "AdmissionNo": admissionNo}; // request = {"ProjectID": projectID, "AdmissionReqNo": admissionReqNo, "AdmissionNo": admissionNo};
request = { request = {
"PaymentRequestId": paymentRequestID,
"ProjectID": projectID, "ProjectID": projectID,
"ClientOrderID": orderID, "ClientOrderID": orderID,
"OrderDescription": "InPatient Advance Payment", "OrderDescription": "InPatient Advance Payment",

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.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:diplomaticquarterapp/vital_signs/data/vitals_benchmark.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
@ -10,7 +11,7 @@ class VitalSignWidget extends StatelessWidget {
final String vectorUrl; final String vectorUrl;
final dynamic condition; final dynamic condition;
final Map<String, dynamic>? lookupValues; final Map<String, dynamic>? lookupValues;
final Map<String,dynamic>? bloodPressureValues; final Map<String, dynamic>? bloodPressureValues;
final Color? textColor; final Color? textColor;
const VitalSignWidget({ const VitalSignWidget({
@ -35,10 +36,7 @@ class VitalSignWidget extends StatelessWidget {
shadowColor: CustomColors.lightGreyColor, shadowColor: CustomColors.lightGreyColor,
child: Padding( child: Padding(
padding: const EdgeInsets.all(12.0), padding: const EdgeInsets.all(12.0),
child: Column( child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Row( Row(
children: [ children: [
SvgPicture.asset(vectorUrl, width: 36.0, height: 36.0), SvgPicture.asset(vectorUrl, width: 36.0, height: 36.0),
@ -75,17 +73,13 @@ class VitalSignWidget extends StatelessWidget {
), ),
if (condition is RangeConditionWithTitle) if (condition is RangeConditionWithTitle)
Status( Status(
status: status: "${TranslationBase.of(context).getValue(condition.current?.interpretation ?? '')}",
"${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}", originalData: condition.current?.interpretation ?? '',
originalData: condition.current?.quantitativeInterpretation??'',
) )
else if (condition is RangeConditionForBloodPressure) else if (condition is RangeConditionForBloodPressure)
Status( Status(
status: status: "${TranslationBase.of(context).getValue(condition.systolic?.systolic.interpretation ?? '')}",
"${TranslationBase.of(context).getValue(condition.systolic?.systolic.quantitativeInterpretation ?? '')}", originalData: condition.systolic?.systolic.interpretation ?? '',
originalData: condition
.systolic?.systolic.quantitativeInterpretation ??
'',
) )
// Text( // Text(
// "${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}", // "${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}",
@ -118,9 +112,8 @@ class VitalSignWidget extends StatelessWidget {
itemCount: condition.condition?.length ?? 0, itemCount: condition.condition?.length ?? 0,
itemBuilder: (_, index) => RangeWidget( itemBuilder: (_, index) => RangeWidget(
title: condition.condition?[index].title ?? 'test', title: condition.condition?[index].title ?? 'test',
isSelected: condition.condition?[index] isSelected: condition.condition?[index].isInRange(vitalSignValue) == true,
.isInRange(vitalSignValue) == originalData: condition.current?.interpretation ?? '',
true,
), ),
), ),
), ),
@ -159,15 +152,11 @@ class VitalSignWidget extends StatelessWidget {
shrinkWrap: true, shrinkWrap: true,
itemCount: condition.condition?.length ?? 0, itemCount: condition.condition?.length ?? 0,
itemBuilder: (_, currentIndex) { itemBuilder: (_, currentIndex) {
var title = var title = condition.condition?[currentIndex].quotient ?? '';
condition.condition?[currentIndex].quotient ??
'';
return RangeWidget( return RangeWidget(
title: title, title: title,
isSelected: condition.condition?[currentIndex] isSelected: condition.condition?[currentIndex]?.getValue("systolic-lng")?.isSelected == true,
?.getValue("systolic-lng") originalData: condition.systolic?.systolic.interpretation ?? '',
?.isSelected ==
true,
); );
}), }),
), ),
@ -305,8 +294,9 @@ class VitalSignWidget extends StatelessWidget {
class RangeWidget extends StatelessWidget { class RangeWidget extends StatelessWidget {
final String title; final String title;
final bool isSelected; final bool isSelected;
final String originalData;
const RangeWidget({super.key, required this.title, required this.isSelected}); const RangeWidget({super.key, required this.title, required this.isSelected, required this.originalData});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -317,18 +307,14 @@ class RangeWidget extends StatelessWidget {
borderRadius: BorderRadius.circular(3), borderRadius: BorderRadius.circular(3),
), ),
// color: Color(0xFF359846), // color: Color(0xFF359846),
color: (isSelected) color: (isSelected) ? getColor(originalData) : CustomColors.lightGreyColor,
? CustomColors.accentColor
: CustomColors.lightGreyColor,
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Center( child: Center(
child: Text( child: Text(
title, title,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(color: (isSelected) ? Colors.white : Colors.black, fontSize: 12),
color: (isSelected) ? Colors.white : Colors.black,
fontSize: 12),
), ),
), ),
), ),
@ -363,29 +349,28 @@ class Status extends StatelessWidget {
borderRadius: BorderRadius.circular(3), borderRadius: BorderRadius.circular(3),
), ),
// color: Color(0xFF359846), // color: Color(0xFF359846),
color: (originalData.toLowerCase() == 'good' || color: getColor(originalData),
originalData.toLowerCase() == 'excellent' ||
originalData.toLowerCase() == 'normal')
? Color(0xFFD8E8DB)
: (originalData.toLowerCase() == 'poor' ||
originalData.toLowerCase() == 'atRisk')
? Color(0xFFD3D37E)
: Color(0x98d02127),
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
child: Text(status, child: Text(status,
style: TextStyle( style: TextStyle(
color: (originalData.toLowerCase() == 'good' || color: Colors.white,
originalData.toLowerCase() == 'excellent' || fontSize: 12,
originalData.toLowerCase() == 'normal')
? Color(0xFF359846)
: (originalData.toLowerCase() == 'poor' ||
originalData.toLowerCase() == 'atRisk')
? Colors.white
: Colors.white,
fontSize: 8,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
)), )),
)); ));
} }
getColor(title) {
switch (title) {
case "excellent":
return Color(0xFF275b45);
case "good":
return Color(0xFF507a3d);
case "poor":
return Color(0xFFa86452);
case "atRisk":
return Color(0xFFa2494b);
}
}
} }

@ -103,7 +103,7 @@ var vital = {
"unit": "mmHg", "unit": "mmHg",
"values": [ "values": [
{ {
"quotient": "(0-90) / (0-60)", "quotient": "0-90",
"systolic-lng": { "systolic-lng": {
"min": 0, "min": 0,
"max": 90, "max": 90,
@ -122,7 +122,7 @@ var vital = {
} }
}, },
{ {
"quotient": "(90-120) / (60-70)", "quotient": "90-120",
"systolic-lng": { "systolic-lng": {
"min": 90, "min": 90,
"max": 120, "max": 120,
@ -141,7 +141,7 @@ var vital = {
} }
}, },
{ {
"quotient": "(120-130) / (70-80)", "quotient": "120-130",
"systolic-lng": { "systolic-lng": {
"min": 120, "min": 120,
"max": 130, "max": 130,
@ -160,7 +160,7 @@ var vital = {
} }
}, },
{ {
"quotient": "(130-140) / (80-90)", "quotient": "130-140",
"systolic-lng": { "systolic-lng": {
"min": 130, "min": 130,
"max": 140, "max": 140,

@ -31,7 +31,6 @@ class ResultScreen extends StatelessWidget {
final deviceSize = MediaQuery.of(context).size; final deviceSize = MediaQuery.of(context).size;
const textColor = Color.fromARGB(255, 0, 0, 0); const textColor = Color.fromARGB(255, 0, 0, 0);
print('the age is ${healthResult?.vitalSigns?.facialSkinAge}');
return AppScaffold( return AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: TranslationBase.of(context).result, appBarTitle: TranslationBase.of(context).result,
@ -39,53 +38,48 @@ class ResultScreen extends StatelessWidget {
showNewAppBarTitle: true, showNewAppBarTitle: true,
overrideUserLogin: true, overrideUserLogin: true,
backgroundColor: Color(0xffF8F8F8), backgroundColor: Color(0xffF8F8F8),
appBarIcons: [
Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
"Scan Quality: ${_scanParameters!.signalQuality.toStringAsFixed(0)}%",
style: TextStyle(color: Colors.black, fontSize: 14, letterSpacing: -0.68, fontWeight: FontWeight.bold),
),
),
),
],
body: Padding( body: Padding(
padding: const EdgeInsets.all(15), padding: const EdgeInsets.all(15),
child: ListView( child: ListView(
shrinkWrap: true, shrinkWrap: true,
children: [ children: [
Expanded( Expanded(
child: Column( child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
crossAxisAlignment: CrossAxisAlignment.start, if (_holisticAnalysis != null && _holisticAnalysis?.generalWellness != null)
children: [
if (_holisticAnalysis != null &&
_holisticAnalysis?.generalWellness != null)
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
lookupValues: vitalValues['generalWellness']!, lookupValues: vitalValues['generalWellness']!,
vitalSignName: vitalSignName: TranslationBase.of(context).generalWellness,
TranslationBase.of(context).generalWellness, condition: RangeConditionWithTitle.fromJson(vital['generalWellness']!, formatValueToTwoDp(healthResult?.holisticHealth?.generalWellness)),
condition: RangeConditionWithTitle.fromJson( vitalSignValue: formatValueToTwoDp(healthResult?.holisticHealth?.generalWellness),
vital['generalWellness']!,
formatValueToTwoDp(
healthResult?.holisticHealth?.generalWellness)),
vitalSignValue: formatValueToTwoDp(
healthResult?.holisticHealth?.generalWellness),
vectorUrl: 'assets/images/svg/wellness.svg', vectorUrl: 'assets/images/svg/wellness.svg',
),//wellness ), //wellness
if (_vitalSign?.stress != null) if (_vitalSign?.stress != null)
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
vitalSignName: TranslationBase.of(context).stress, vitalSignName: TranslationBase.of(context).stress,
condition: RangeConditionWithTitle.fromJson( condition: RangeConditionWithTitle.fromJson(vital['stressLevel']!, formatValueToTwoDp(healthResult?.vitalSigns.stress)),
vital['stressLevel']!,
formatValueToTwoDp(
healthResult?.vitalSigns.stress)),
lookupValues: vitalValues['stressLevel']!, lookupValues: vitalValues['stressLevel']!,
vitalSignValue: vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.stress),
formatValueToTwoDp(healthResult?.vitalSigns.stress),
vectorUrl: 'assets/images/svg/stress.svg', vectorUrl: 'assets/images/svg/stress.svg',
), ),
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
vitalSignName: TranslationBase.of(context).pulseTitle, vitalSignName: TranslationBase.of(context).pulseTitle,
condition: RangeConditionWithTitle.fromJson( condition: RangeConditionWithTitle.fromJson(vital['HR']!, formatValueToTwoDp(healthResult?.vitalSigns.heartRate)),
vital['HR']!,
formatValueToTwoDp(
healthResult?.vitalSigns.heartRate)),
lookupValues: vitalValues['HR']!, lookupValues: vitalValues['HR']!,
vitalSignValue: formatValueToTwoDp( vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.heartRate),
healthResult?.vitalSigns.heartRate),
vectorUrl: 'assets/images/svg/heartrate.svg', vectorUrl: 'assets/images/svg/heartrate.svg',
), ),
//heart rate //heart rate
@ -93,12 +87,9 @@ class ResultScreen extends StatelessWidget {
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
vitalSignName: "Blood Pressure", vitalSignName: "Blood Pressure",
condition: RangeConditionForBloodPressure.fromJson( condition: RangeConditionForBloodPressure.fromJson(vital['blood_pressure']!, healthResult?.vitalSigns.bloodPressure ?? ""),
vital['blood_pressure']!,
healthResult?.vitalSigns.bloodPressure ?? ""),
bloodPressureValues: vitalValues['blood_pressure']!, bloodPressureValues: vitalValues['blood_pressure']!,
vitalSignValue: vitalSignValue: healthResult?.vitalSigns.bloodPressure ?? "",
healthResult?.vitalSigns.bloodPressure ?? "",
vectorUrl: 'assets/images/svg/bloodpressure.svg', vectorUrl: 'assets/images/svg/bloodpressure.svg',
), ),
if (_vitalSign?.hrvSdnn != null) if (_vitalSign?.hrvSdnn != null)
@ -107,52 +98,34 @@ class ResultScreen extends StatelessWidget {
textColor: textColor, textColor: textColor,
vitalSignName: "HRV SDNN", vitalSignName: "HRV SDNN",
lookupValues: vitalValues['hrvv']!, lookupValues: vitalValues['hrvv']!,
condition: RangeConditionWithTitle.fromJson( condition: RangeConditionWithTitle.fromJson(vital['hrvv']!, formatValueToTwoDp(healthResult?.vitalSigns.hrvSdnn)),
vital['hrvv']!, vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.hrvSdnn)),
formatValueToTwoDp(
healthResult?.vitalSigns.hrvSdnn)),
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.hrvSdnn)),
//oxygen //oxygen
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
lookupValues: vitalValues['Sp02']!, lookupValues: vitalValues['Sp02']!,
vitalSignName: vitalSignName: TranslationBase.of(context).oxygenSaturation,
TranslationBase.of(context).oxygenSaturation, condition: RangeConditionWithTitle.fromJson(vital['Sp02']!, formatValueToTwoDp(healthResult?.vitalSigns.spo2)),
condition: RangeConditionWithTitle.fromJson( vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.spo2),
vital['Sp02']!,
formatValueToTwoDp(healthResult?.vitalSigns.spo2)),
vitalSignValue:
formatValueToTwoDp(healthResult?.vitalSigns.spo2),
vectorUrl: 'assets/images/svg/oxygen.svg', vectorUrl: 'assets/images/svg/oxygen.svg',
), ),
if (_vitalSign?.respiratoryRate != null) if (_vitalSign?.respiratoryRate != null)
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
lookupValues: vitalValues['respiratoryRate']!, lookupValues: vitalValues['respiratoryRate']!,
vitalSignName: vitalSignName: TranslationBase.of(context).respiratoryRate,
TranslationBase.of(context).respiratoryRate, condition: RangeConditionWithTitle.fromJson(vital['respiratoryRate']!, formatValueToTwoDp(healthResult?.vitalSigns.respiratoryRate)),
condition: RangeConditionWithTitle.fromJson( vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.respiratoryRate),
vital['respiratoryRate']!,
formatValueToTwoDp(
healthResult?.vitalSigns.respiratoryRate)),
vitalSignValue: formatValueToTwoDp(
healthResult?.vitalSigns.respiratoryRate),
vectorUrl: 'assets/images/svg/breathing.svg', vectorUrl: 'assets/images/svg/breathing.svg',
), ),
if (_holisticAnalysis != null && if (_holisticAnalysis != null && _holisticAnalysis?.bmi != null)
_holisticAnalysis?.bmi != null)
VitalSignWidget( VitalSignWidget(
textColor: textColor, textColor: textColor,
lookupValues: vitalValues['bmi']!, lookupValues: vitalValues['bmi']!,
vitalSignName: TranslationBase.of(context).BMI, vitalSignName: TranslationBase.of(context).BMI,
condition: RangeConditionWithTitle.fromJson( condition: RangeConditionWithTitle.fromJson(vital['bmi']!, formatValueToTwoDp(healthResult?.holisticHealth?.bmi)),
vital['bmi']!, vitalSignValue: formatValueToTwoDp(healthResult?.holisticHealth?.bmi),
formatValueToTwoDp(
healthResult?.holisticHealth?.bmi)),
vitalSignValue: formatValueToTwoDp(
healthResult?.holisticHealth?.bmi),
vectorUrl: 'assets/images/svg/bmi.svg', vectorUrl: 'assets/images/svg/bmi.svg',
), ),
// VitalSignWidget( // VitalSignWidget(
@ -162,7 +135,6 @@ class ResultScreen extends StatelessWidget {
// vitalSignValue: // vitalSignValue:
// formatValueToTwoDp(healthResult?.vitalSigns.ibi)), // formatValueToTwoDp(healthResult?.vitalSigns.ibi)),
// if (_vitalSign?.hrvRmssd != null) // if (_vitalSign?.hrvRmssd != null)
// VitalSignWidget( // VitalSignWidget(
// textColor: textColor, // textColor: textColor,
@ -202,7 +174,6 @@ class ResultScreen extends StatelessWidget {
// ), // ),
// ), // ),
// if (_holisticAnalysis != null && // if (_holisticAnalysis != null &&
// _holisticAnalysis?.absi != null) // _holisticAnalysis?.absi != null)
// VitalSignWidget( // VitalSignWidget(

@ -105,6 +105,8 @@ class _VitalSignsState extends State<VitalSigns> with RouteAware {
body: Column( body: Column(
children: [ children: [
if (_conditions != null) if (_conditions != null)
ScanConditionChecklist(
deviceSize: deviceSize, conditions: _conditions!),
Expanded( Expanded(
child: Stack( child: Stack(
children: [ children: [

Loading…
Cancel
Save