diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart index de543970..ee719280 100644 --- a/lib/features/lab/lab_view_model.dart +++ b/lib/features/lab/lab_view_model.dart @@ -424,7 +424,7 @@ class LabViewModel extends ChangeNotifier { } else if (apiResponse.messageStatus == 1) { var sortedResult = sort(apiResponse.data!); var recentThree = sortedResult.take(3).toList(); - mainLabResults = recentThree; + mainLabResults = sortedResult; double highRefrenceValue = double.negativeInfinity; String? flagForHighReferenceRange; @@ -433,6 +433,8 @@ class LabViewModel extends ChangeNotifier { sortedResult.toList().reversed.forEach((element) { try { + shouldShowGraph = isNumeric(element.resultValue!); + // if(isNumeric(element.resultValue!)){ var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!); var resultValue = double.parse(element.resultValue!); // var transformedValue = transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag ?? ""); @@ -444,13 +446,22 @@ class LabViewModel extends ChangeNotifier { if (resultValue < minY) { minY = resultValue; } - if (highRefrenceValue < double.parse(element.referenceHigh ?? "0.0")) { + // if (highRefrenceValue < double.parse(element.referenceHigh ?? "0.0")) { highRefrenceValue = double.parse(element.referenceHigh ?? "0.0"); flagForHighReferenceRange = element.calculatedResultFlag; - } - if (lowRefenceValue > double.parse(element.referenceLow ?? "0.0")) { + // } + // if (lowRefenceValue > double.parse(element.referenceLow ?? "0.0")) { lowRefenceValue = double.parse(element.referenceLow ?? "0.0"); flagForLowReferenceRange = element.calculatedResultFlag; + // } + + if(double.parse(element.referenceHigh ?? "0.0") == 0 ){ + highRefrenceValue = double.negativeInfinity; + } + + + if(double.parse(element.referenceLow ?? "0.0") == 0 ){ + lowRefenceValue = double.negativeInfinity; } filteredGraphValues.add(DataPoint( @@ -462,28 +473,41 @@ class LabViewModel extends ChangeNotifier { time: DateUtil.convertStringToDate(element.verifiedOnDateTime), referenceValue: element.calculatedResultFlag ?? "", )); - } catch (e) {} + + } catch (e) { + print("the data is empty and not a number"); + } }); if (flagForLowReferenceRange == null && flagForHighReferenceRange == null) { highRefrenceValue = maxY; lowRefenceValue = minY; } // - if (minY > lowRefenceValue) { + if (lowRefenceValue != double.negativeInfinity &&minY > lowRefenceValue) { minY = lowRefenceValue - getInterval(); + }else if (highRefrenceValue != double.negativeInfinity && minY > highRefrenceValue) { + minY = highRefrenceValue - getInterval(); } this.flagForHighReferenceRange = flagForHighReferenceRange; this.flagForLowReferenceRange = flagForLowReferenceRange; highTransformedReferenceValue = double.parse(transformValueInRange(highRefrenceValue, flagForHighReferenceRange ?? "").toStringAsFixed(1)); lowTransformedReferenceValue = double.parse(transformValueInRange(lowRefenceValue, flagForLowReferenceRange ?? "").toStringAsFixed(1)); - this.highRefrenceValue = double.parse(highRefrenceValue.toStringAsFixed(1)); - this.lowRefenceValue = double.parse(lowRefenceValue.toStringAsFixed(1)); - if(maxY().flush(); model.getPatientLabResult(model.currentlySelectedPatientOrder!, labItem.description ?? "", labItem.testShortDescription ?? "", labItem.uOM ?? ""); }, tests: labItem, diff --git a/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart b/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart index ac2537e1..1c7d0400 100644 --- a/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart +++ b/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart @@ -112,22 +112,25 @@ class LabOrderResultItem extends StatelessWidget { ], ), ), - CustomButton( - icon: AppAssets.view_report_icon, - iconColor: AppColors.infoColor, - iconSize: 16.h, - text: LocaleKeys.viewReport.tr(context: context), - onPressed: () { - onTap(); - }, - backgroundColor: AppColors.infoColor.withAlpha(20), - borderColor: AppColors.infoColor.withAlpha(0), - textColor: AppColors.infoColor, - fontSize: 14, - fontWeight: FontWeight.w500, - borderRadius: 12, - padding: EdgeInsets.fromLTRB(10, 0, 10, 0), - height: 40.h, + Visibility( + visible: tests?.checkIfGraphShouldBeDisplayed() == true, + child: CustomButton( + icon: AppAssets.view_report_icon, + iconColor: AppColors.infoColor, + iconSize: 16.h, + text: LocaleKeys.viewReport.tr(context: context), + onPressed: () { + onTap(); + }, + backgroundColor: AppColors.infoColor.withAlpha(20), + borderColor: AppColors.infoColor.withAlpha(0), + textColor: AppColors.infoColor, + fontSize: 14, + fontWeight: FontWeight.w500, + borderRadius: 12, + padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + height: 40.h, + ), ), ], ), diff --git a/lib/presentation/lab/lab_results/lab_result_details.dart b/lib/presentation/lab/lab_results/lab_result_details.dart index aeef4240..ae73b08b 100644 --- a/lib/presentation/lab/lab_results/lab_result_details.dart +++ b/lib/presentation/lab/lab_results/lab_result_details.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/route_extensions.dart'; @@ -19,9 +20,11 @@ import 'package:hmg_patient_app_new/widgets/date_range_selector/date_range_calen import 'package:hmg_patient_app_new/presentation/lab/lab_results/lab_result_list_item.dart'; import 'package:hmg_patient_app_new/theme/colors.dart' show AppColors; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart'; import 'package:hmg_patient_app_new/widgets/graph/custom_graph.dart'; import 'package:provider/provider.dart' show Consumer, Provider, ReadContext, Selector; +import '../../../core/common_models/data_points.dart'; import '../../../widgets/common_bottom_sheet.dart' show showCommonBottomSheetWithoutHeight; import 'dart:ui' as ui; @@ -63,29 +66,44 @@ class LabResultDetails extends StatelessWidget { children: [ LabNameAndStatus(context), getLabDescription(context), - LabGraph(context), - Container( - padding: EdgeInsets.symmetric(horizontal: 24.h, vertical: 16.h), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - borderRadius: 24.h, - hasShadow: true, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - LocaleKeys.history.tr(context: context).toText16(isBold: true, color: AppColors.textColor), - (labVM.isLabResultsHistoryShowMore ? "Show Less" : "Show More").toText14(weight: FontWeight.w500, color: AppColors.primaryRedColor, isUnderLine: true).onPress(() { - labVM.setIsLabResultsHistoryShowMore(); - }), - ], - ), - SizedBox(height: 24.h,), - labHistoryList(labVM), - ], + Selector?>( + selector: (_, model) => model.mainLabResults, + builder: (_, data, __) => Visibility( + visible: data?.isNotEmpty == true, + child: Column( + spacing: 16.h, + children: [ + LabGraph(context), + Container( + padding: EdgeInsets.symmetric(horizontal: 24.h, vertical: 16.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24.h, + hasShadow: true, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + LocaleKeys.history.tr(context: context).toText16(isBold: true, color: AppColors.textColor), + (labVM.isLabResultsHistoryShowMore ? "Show Less" : "Show More") + .toText14(weight: FontWeight.w500, color: AppColors.primaryRedColor, isUnderLine: true) + .onPress(() { + labVM.setIsLabResultsHistoryShowMore(); + }), + ], + ), + SizedBox( + height: 24.h, + ), + labHistoryList(labVM), + ], + ), + ), + ], + ), ), ), Selector( @@ -324,7 +342,7 @@ class LabResultDetails extends StatelessWidget { } Widget historyBody(LabViewModel labmodel) { - if (labmodel.isGraphVisible && labmodel.shouldShowGraph) { + if (labmodel.shouldShowGraph) { var graphColor = labmodel.getColor(recentLabResult.calculatedResultFlag ?? "N"); return CustomGraph( dataPoints: labmodel.filteredGraphValues, @@ -336,10 +354,11 @@ class LabResultDetails extends StatelessWidget { maxY: (labmodel.maxY), minY: labmodel.minY, maxX: labmodel.filteredGraphValues.length.toDouble() - .75, - horizontalInterval: .1, + horizontalInterval: .01, isRTL: getIt.get().isArabic(), getDrawingHorizontalLine: (value) { - value = double.parse(value.toStringAsFixed(1)); + value = double.parse(value.toStringAsFixed(2)); + // print("the value is $value"); if (value == labmodel.highRefrenceValue || value == labmodel.lowRefenceValue) { return FlLine( color: AppColors.bgGreenColor.withOpacity(0.6), @@ -354,7 +373,7 @@ class LabResultDetails extends StatelessWidget { ; }, leftLabelFormatter: (value) { - value = double.parse(value.toStringAsFixed(1)); + value = double.parse(value.toStringAsFixed(2)); return leftLabels(value.toStringAsFixed(2)); // if (value == labmodel.highRefrenceValue) { // return leftLabels(LocaleKeys.high.tr()); @@ -387,9 +406,8 @@ class LabResultDetails extends StatelessWidget { minX: (labmodel.filteredGraphValues.length == 1) ? null : -.2, scrollDirection: Axis.horizontal, height: 180.h); - } else { - return labHistoryList(labmodel); } + return SizedBox.shrink(); } List _buildRangeShades( @@ -419,18 +437,18 @@ class LabResultDetails extends StatelessWidget { Widget labHistoryList(LabViewModel labmodel) { return SizedBox( - height: labmodel.filteredGraphValues.length < 3 ? labmodel.filteredGraphValues.length * 64 : (!labmodel.isLabResultsHistoryShowMore ? 180.h : 220.h), + height: labmodel.mainLabResults.length < 3 ? labmodel.mainLabResults.length * 64 : (!labmodel.isLabResultsHistoryShowMore ? 180.h : 220.h), child: ListView.separated( padding: EdgeInsets.zero, // itemCount: labmodel.isLabResultsHistoryShowMore ? (labmodel.filteredGraphValues.length < 3 ? labmodel.filteredGraphValues : 3) : labmodel.filteredGraphValues.length, - itemCount: !labmodel.isLabResultsHistoryShowMore ? (labmodel.filteredGraphValues.length < 3 ? labmodel.filteredGraphValues.length : 3) : labmodel.filteredGraphValues.length, + itemCount: !labmodel.isLabResultsHistoryShowMore ? (labmodel.mainLabResults.length < 3 ? labmodel.mainLabResults.length : 3) : labmodel.mainLabResults.length, itemBuilder: (context, index) { - var data = labmodel.filteredGraphValues.reversed.toList()[index]; + var data = labmodel.mainLabResults.reversed.toList()[index]; return LabHistoryItem( - dayNameAndDate: labmodel.getFormattedDate(data.time), - result: data.actualValue, - assetUrl: labmodel.getAssetUrlWRTResult(data.referenceValue), - shouldRotateIcon: labmodel.getRotationWRTResult(data.referenceValue), + dayNameAndDate: labmodel.getFormattedDate(DateUtil.convertStringToDate(data.verifiedOnDateTime)), + result: data.resultValue??"", + assetUrl: labmodel.getAssetUrlWRTResult(data.calculatedResultFlag??""), + shouldRotateIcon: labmodel.getRotationWRTResult(data.calculatedResultFlag??""), ); }, separatorBuilder: (_, __) => Divider( @@ -457,6 +475,7 @@ class LabResultDetails extends StatelessWidget { Widget getLabDescription(BuildContext context) { return Container( + width: MediaQuery.sizeOf(context).width, decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 24.h,