|
|
|
|
@ -45,89 +45,110 @@ class _HealthCalculatorDetailedPageState extends State<HealthCalculatorDetailedP
|
|
|
|
|
return CollapsingListView(
|
|
|
|
|
title: widget.calculatorType.displayName,
|
|
|
|
|
bottomChild: widget.calculatorType == HealthCalculatorsTypeEnum.bloodSugar ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.bloodCholesterol ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.triglycerides
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.bloodCholesterol ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.triglycerides
|
|
|
|
|
? SizedBox()
|
|
|
|
|
: Container(
|
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
|
color: AppColors.whiteColor, customBorder: BorderRadius.only(topLeft: Radius.circular(24.r), topRight: Radius.circular(24.r))),
|
|
|
|
|
padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 20.h),
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
text: widget.calculatorType == HealthCalculatorsTypeEnum.bloodSugar ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.bloodCholesterol ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.triglycerides
|
|
|
|
|
? LocaleKeys.convert.tr(context: context)
|
|
|
|
|
: LocaleKeys.calculate.tr(context: context),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
if (calculatedResult == null) return;
|
|
|
|
|
Navigator.of(context).push(CustomPageRoute(
|
|
|
|
|
page: SelectClinicPage(calculatorType: widget.calculatorType, calculatedResult: calculatedResult),
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
icon: null,
|
|
|
|
|
fontSize: 16.f,
|
|
|
|
|
backgroundColor: calculatedResult == null ? AppColors.bgRedLightColor : AppColors.primaryRedColor,
|
|
|
|
|
borderColor: calculatedResult == null ? AppColors.bgRedLightColor : AppColors.primaryRedColor,
|
|
|
|
|
borderRadius: 12.r,
|
|
|
|
|
isBold: true)),
|
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
|
color: AppColors.whiteColor, customBorder: BorderRadius.only(topLeft: Radius.circular(24.r), topRight: Radius.circular(24.r))),
|
|
|
|
|
padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 20.h),
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
text: widget.calculatorType == HealthCalculatorsTypeEnum.bloodSugar ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.bloodCholesterol ||
|
|
|
|
|
widget.calculatorType == HealthCalculatorsTypeEnum.triglycerides
|
|
|
|
|
? LocaleKeys.convert.tr(context: context)
|
|
|
|
|
: LocaleKeys.calculate.tr(context: context),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
if (calculatedResult == null) return;
|
|
|
|
|
Navigator.of(context).push(CustomPageRoute(
|
|
|
|
|
page: SelectClinicPage(calculatorType: widget.calculatorType, calculatedResult: calculatedResult),
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
icon: null,
|
|
|
|
|
fontSize: 16.f,
|
|
|
|
|
backgroundColor: calculatedResult == null ? AppColors.bgRedLightColor : AppColors.primaryRedColor,
|
|
|
|
|
borderColor: calculatedResult == null ? AppColors.bgRedLightColor : AppColors.primaryRedColor,
|
|
|
|
|
borderRadius: 12.r,
|
|
|
|
|
isBold: true)),
|
|
|
|
|
child: getCalculatorWidget(
|
|
|
|
|
type: widget.calculatorType,
|
|
|
|
|
onCalculate: (result) {
|
|
|
|
|
// result may be directly provided by widget, but prefer provider maps if available
|
|
|
|
|
|
|
|
|
|
switch (widget.calculatorType) {
|
|
|
|
|
case HealthCalculatorsTypeEnum.bmi:
|
|
|
|
|
calculatedResult = provider.bmiResultMap != null
|
|
|
|
|
? {...?provider.bmiResultMap, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.calories:
|
|
|
|
|
case HealthCalculatorsTypeEnum.bmr:
|
|
|
|
|
calculatedResult = provider.caloriesResultMap != null
|
|
|
|
|
? {...?provider.caloriesResultMap, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.idealBodyWeight:
|
|
|
|
|
calculatedResult = provider.ibwResultMap != null
|
|
|
|
|
? {...?provider.ibwResultMap, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.bodyFat:
|
|
|
|
|
calculatedResult = provider.bodyFatResultMap != null
|
|
|
|
|
? {...?provider.bodyFatResultMap, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.crabsProteinFat:
|
|
|
|
|
calculatedResult = provider.macrosResultMap != null
|
|
|
|
|
? {...?provider.macrosResultMap, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.ovulation:
|
|
|
|
|
calculatedResult = (provider.ovulationResult is Map)
|
|
|
|
|
? {...provider.ovulationResult as Map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': provider.ovulationResult ?? result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.deliveryDueDate:
|
|
|
|
|
calculatedResult = (provider.deliveryResult is Map)
|
|
|
|
|
? {...provider.deliveryResult as Map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': provider.deliveryResult ?? result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.bloodSugar:
|
|
|
|
|
calculatedResult = (provider.bloodSugarResult is Map)
|
|
|
|
|
? {...provider.bloodSugarResult as Map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': provider.bloodSugarResult ?? result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.bloodCholesterol:
|
|
|
|
|
calculatedResult = (provider.bloodCholesterolResult is Map)
|
|
|
|
|
? {...provider.bloodCholesterolResult as Map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': provider.bloodCholesterolResult ?? result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.triglycerides:
|
|
|
|
|
calculatedResult = (provider.triglyceridesResult is Map)
|
|
|
|
|
? {...provider.triglyceridesResult as Map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: {'result': provider.triglyceridesResult ?? result, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID};
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
setState(() {
|
|
|
|
|
switch (widget.calculatorType) {
|
|
|
|
|
case HealthCalculatorsTypeEnum.bmi:
|
|
|
|
|
final map = provider.bmiResultMap ?? (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.calories:
|
|
|
|
|
case HealthCalculatorsTypeEnum.bmr:
|
|
|
|
|
final map = provider.caloriesResultMap ?? (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.idealBodyWeight:
|
|
|
|
|
final map = provider.ibwResultMap ?? (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.bodyFat:
|
|
|
|
|
final map = provider.bodyFatResultMap ?? (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.crabsProteinFat:
|
|
|
|
|
final map = provider.macrosResultMap ?? (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.ovulation:
|
|
|
|
|
final map = (provider.ovulationResult is Map)
|
|
|
|
|
? provider.ovulationResult
|
|
|
|
|
: (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.deliveryDueDate:
|
|
|
|
|
final map = (provider.deliveryResult is Map)
|
|
|
|
|
? provider.deliveryResult
|
|
|
|
|
: (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.bloodSugar:
|
|
|
|
|
final map = (provider.bloodSugarResult is Map)
|
|
|
|
|
? provider.bloodSugarResult
|
|
|
|
|
: (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.bloodCholesterol:
|
|
|
|
|
final map = (provider.bloodCholesterolResult is Map)
|
|
|
|
|
? provider.bloodCholesterolResult
|
|
|
|
|
: (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
case HealthCalculatorsTypeEnum.triglycerides:
|
|
|
|
|
final map = (provider.triglyceridesResult is Map)
|
|
|
|
|
? provider.triglyceridesResult
|
|
|
|
|
: (result is Map ? Map<String, dynamic>.from(result) : null);
|
|
|
|
|
calculatedResult = map != null
|
|
|
|
|
? {...map, 'clinicId': widget.clinicID, 'calculationID': widget.calculationID}
|
|
|
|
|
: null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
).paddingSymmetrical(20.w, 24.h),
|
|
|
|
|
);
|
|
|
|
|
@ -140,68 +161,68 @@ class _HealthCalculatorDetailedPageState extends State<HealthCalculatorDetailedP
|
|
|
|
|
case HealthCalculatorsTypeEnum.bmi:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: BMIWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
case HealthCalculatorsTypeEnum.calories:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: CaloriesWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.bmr:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: BMRWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.idealBodyWeight:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: IdealBodyWeightWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.bodyFat:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: BodyFatWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.crabsProteinFat:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: CrabsWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.ovulation:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: OvulationWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.deliveryDueDate:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: DeliveryDueDWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.bloodSugar:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: BloodSugarWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.bloodCholesterol:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: BloodCholesterolWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
case HealthCalculatorsTypeEnum.triglycerides:
|
|
|
|
|
return Container(
|
|
|
|
|
decoration:
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.all(Radius.circular(24.r))),
|
|
|
|
|
child: TriglyceridesWidget(onChange: onCalculate),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|