graph reference low nd high value address.

* if the referenncehigh is 0 then it will be neglected
* if the referencelow is 0 then it will be neglected.
lab-graph
tahaalam 1 day ago
parent 6def7b5263
commit 2ae9ab9fac

@ -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<highRefrenceValue){
maxY = highRefrenceValue;
this.highRefrenceValue = double.parse(highRefrenceValue.toStringAsFixed(2));
this.lowRefenceValue = double.parse(lowRefenceValue.toStringAsFixed(2));
if(highRefrenceValue != double.negativeInfinity &&maxY<highRefrenceValue){
maxY = highRefrenceValue+ getInterval();
maxX = maxY;
}else if(lowRefenceValue != double.negativeInfinity && maxY<lowRefenceValue){
maxY = lowRefenceValue+ getInterval()/2;
maxX = maxY;
}
print("the lowRefenceValue is ${this.lowRefenceValue}");
print("the highRefrenceValue is ${this.highRefrenceValue}");
// if (maxY < highRefrenceValue) {
// minY = highRefrenceValue - getInterval();
// }
@ -505,6 +529,10 @@ class LabViewModel extends ChangeNotifier {
},
);
}
bool isNumeric(String s) {
return num.tryParse(s) != null;
}
num getInterval() {
// return .1;
var maxX = maxY;

@ -8,6 +8,8 @@ import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart';
import 'package:provider/provider.dart' show Selector, Provider, ReadContext;
import '../../../widgets/date_range_selector/viewmodel/date_range_view_model.dart';
class LabResultList extends StatelessWidget {
late LabViewModel model;
@ -27,6 +29,7 @@ class LabResultList extends StatelessWidget {
shrinkWrap: true,itemCount: list.length,itemBuilder: (____, index) {
var labItem = list[index];
return LabOrderResultItem(onTap: () {
context.read<DateRangeSelectorRangeViewModel>().flush();
model.getPatientLabResult(model.currentlySelectedPatientOrder!, labItem.description ?? "", labItem.testShortDescription ?? "", labItem.uOM ?? "");
},
tests: labItem,

@ -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,
),
),
],
),

@ -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<LabViewModel, List<LabResult>?>(
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<LabViewModel, LabOrderResponseByAi?>(
@ -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<AppState>().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<HorizontalRangeAnnotation> _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,

Loading…
Cancel
Save