From e441d0d6ce35822fd0fde4b35709d537b27d8f76 Mon Sep 17 00:00:00 2001 From: "taha.alam" Date: Tue, 19 Aug 2025 16:08:04 +0300 Subject: [PATCH] WD: Lab result values adjusted for tablet and normal devices. --- .../viewModels/medical/labs_view_model.dart | 19 ++++++------- .../LabResult/Lab_Result_details_wideget.dart | 28 +++++++++++++++---- .../LabResult/laboratory_result_widget.dart | 7 ++++- .../medical/LabResult/newUI/labWidgets.dart | 10 +++++-- 4 files changed, 45 insertions(+), 19 deletions(-) diff --git a/lib/core/viewModels/medical/labs_view_model.dart b/lib/core/viewModels/medical/labs_view_model.dart index 993bca9d..4c239e65 100644 --- a/lib/core/viewModels/medical/labs_view_model.dart +++ b/lib/core/viewModels/medical/labs_view_model.dart @@ -97,7 +97,7 @@ class LabsViewModel extends BaseViewModel { } } - getPatientLabResult({required PatientLabOrders patientLabOrder, required bool isVidaPlus}) async { + getPatientLabResult({required PatientLabOrders patientLabOrder, required bool isVidaPlus, bool isTablet = false}) async { setState(ViewState.Busy); await _labsService.getPatientLabResult(patientLabOrder: patientLabOrder, isVidaPlus: isVidaPlus); if (_labsService.hasError) { @@ -107,7 +107,7 @@ class LabsViewModel extends BaseViewModel { _labsService.labResultList.forEach((element) { List patientLabOrdersClinic = labResultLists.where((elementClinic) => elementClinic.filterName == element.testCode).toList(); element.percentage = - getPercentage(element.calculatedResultFlag ?? ResultFlag.N); + getPercentage(element.calculatedResultFlag?? ResultFlag.N, isTablet); if (patientLabOrdersClinic.length != 0) { labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element); } else { @@ -121,31 +121,30 @@ class LabsViewModel extends BaseViewModel { } } - double getPercentage(ResultFlag flag) { + double getPercentage(ResultFlag flag, bool isTablet) { double percentage = 0.0; var division = (1/15); - + print("its a tablet $isTablet"); switch (flag) { case ResultFlag.N: - percentage = division * (7.5); + percentage = division * (isTablet?7:6.7); break; case ResultFlag.H: - percentage = division * (11); + percentage = division * (isTablet?11:10.7); break; case ResultFlag.L: - - percentage = division * (4); + percentage = division * (isTablet?3.5:2.5); break; case ResultFlag.CL: case ResultFlag.LCL: - percentage = division * 1.5; + percentage = division * (isTablet?0.7:.01); break; case ResultFlag.HCH: case ResultFlag.CH: - percentage = division * 13.5; + percentage = division * (isTablet?13.5:13.3); break; case ResultFlag.IRR: percentage = 0; diff --git a/lib/widgets/data_display/medical/LabResult/Lab_Result_details_wideget.dart b/lib/widgets/data_display/medical/LabResult/Lab_Result_details_wideget.dart index dd5217b8..088cf153 100644 --- a/lib/widgets/data_display/medical/LabResult/Lab_Result_details_wideget.dart +++ b/lib/widgets/data_display/medical/LabResult/Lab_Result_details_wideget.dart @@ -52,17 +52,34 @@ class _VitalSignDetailsWidgetState extends State { children: [ Utils.tableColumnValue(DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(labOrderResultList![i].verifiedOnDateTime!)), isLast: i == (labOrderResultList.length - 1), mProjectViewModel: projectViewModel), Utils.tableColumnValue(labOrderResultList[i].resultValue!, isLast: i == (labOrderResultList.length - 1), mProjectViewModel: projectViewModel), - changeResult(labOrderResultList[i].changeResult ?? '8%') + changeResult(labOrderResultList[i].changeResult ?? '', labOrderResultList[i].calculatedResultFlag??'IRR') ], ), ); return tableRow; } - Widget changeResult(String changeValue) => Padding( + + Color getColorForResultType(String type) { + switch (type) { + case "LCL": + case "HCH": + case "CH": + case "CL": + return Color(0xFFDE7676); + case "L": + case "H": + return Color(0xFFEAB157); + case "N": + return Color(0xFF09AA28); + default: + return Color(0xFF09AA28); + } + } + Widget changeResult(String changeValue, String type) => Padding( padding: const EdgeInsets.all(4.0), child: Material( - color: (changeValue.contains("-")) ? Colors.black : Color(0xffcecbcb), + color: getColorForResultType(type), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: Padding( @@ -71,9 +88,8 @@ class _VitalSignDetailsWidgetState extends State { child: Text( changeValue, style: TextStyle( - color: (changeValue.contains("-")) - ? Colors.white - : Colors.black, + color: Colors.white + , fontSize: 11, letterSpacing: -.64, fontWeight: FontWeight.w400), diff --git a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart index bc661fab..e6b8b7ea 100644 --- a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart +++ b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart @@ -38,12 +38,17 @@ class _LaboratoryResultWidgetState extends State { labSpecialResult = widget.details ?? TranslationBase.of(context).noDataAvailable; } + bool isTablet(BuildContext context) { + final size = MediaQuery.of(context).size; + final shortestSide = size.shortestSide; + return shortestSide >= 550; + } @override Widget build(BuildContext context) { projectViewModel = Provider.of(context); return BaseView( onModelReady: (model) => - model.getPatientLabResult(isVidaPlus: Utils.isVidaPlusProject(projectViewModel, int.parse(widget.patientLabOrder!.projectID!)), patientLabOrder: widget.patientLabOrder!), + model.getPatientLabResult(isVidaPlus: Utils.isVidaPlusProject(projectViewModel, int.parse(widget.patientLabOrder!.projectID!)), patientLabOrder: widget.patientLabOrder!, isTablet: isTablet(context)), builder: (_, model, w) => NetworkBaseView( baseViewModel: model, child: Column( diff --git a/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart b/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart index 911134c1..4fbce744 100644 --- a/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart +++ b/lib/widgets/data_display/medical/LabResult/newUI/labWidgets.dart @@ -59,7 +59,13 @@ class CustomResultProgressBar extends StatelessWidget { return LayoutBuilder(builder: (context, constraints) { final double totalWidth = constraints.maxWidth; final double spacing = 2; - final double tooltipPosition = (totalWidth * (percentage )).clamp(0, totalWidth - 50); + final int spacingCount = 4; // between 5 bars + final double flexWidth = totalWidth - 50; + + + final double tooltipPosition = + (flexWidth * (percentage / 100)).clamp(0, flexWidth); + return Stack( children: [ Row( @@ -117,7 +123,7 @@ class CustomResultProgressBar extends StatelessWidget { TextCloud( text: "${value}", color: getColorForResultType(type), - width: 100, + width: 75, height: 20, padding: EdgeInsets.zero, axisDirection: AxisDirection.up,