prescription calender reminder added.
							parent
							
								
									60fe32131e
								
							
						
					
					
						commit
						7cc12bd1cf
					
				| @ -0,0 +1,233 @@ | ||||
| import 'package:easy_localization/easy_localization.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hmg_patient_app_new/core/app_assets.dart'; | ||||
| import 'package:hmg_patient_app_new/core/app_export.dart'; | ||||
| import 'package:hmg_patient_app_new/core/utils/calendar_utils.dart'; | ||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; | ||||
| import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | ||||
| import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; | ||||
| import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; | ||||
| import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | ||||
| import 'package:hmg_patient_app_new/theme/colors.dart'; | ||||
| import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; | ||||
| 
 | ||||
| class PrescriptionItemView extends StatelessWidget { | ||||
|   int index; | ||||
|   PrescriptionsViewModel prescriptionVM; | ||||
|   bool isLoading; | ||||
| 
 | ||||
|   PrescriptionItemView({Key? key, required this.prescriptionVM, required this.index, this.isLoading = false}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return AnimatedContainer( | ||||
|       duration: Duration(milliseconds: 300), | ||||
|       curve: Curves.easeInOut, | ||||
|       margin: EdgeInsets.symmetric(vertical: 8.h), | ||||
|       decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: true), | ||||
|       child: Column( | ||||
|         crossAxisAlignment: CrossAxisAlignment.start, | ||||
|         children: [ | ||||
|           SizedBox(height: 16.h), | ||||
|           Row( | ||||
|             mainAxisSize: MainAxisSize.min, | ||||
|             mainAxisAlignment: MainAxisAlignment.start, | ||||
|             spacing: 8.h, | ||||
|             children: [ | ||||
|               Image.network( | ||||
|                 isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].imageThumbUrl!, | ||||
|                 width: 60.h, | ||||
|                 height: 60.h, | ||||
|                 errorBuilder: (cxt, child, tr) { | ||||
|                   return SizedBox(height: 60, width: 60); | ||||
|                 }, | ||||
|                 fit: BoxFit.fill, | ||||
|               ).toShimmer2(isShow: isLoading).circle(100), | ||||
|               Expanded( | ||||
|                 child: (isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].itemDescription!).toText16(isBold: true, maxlines: 2).toShimmer2(isShow: isLoading), | ||||
|               ), | ||||
|             ], | ||||
|           ).paddingSymmetrical(16.h, 0.h), | ||||
|           SizedBox(height: 16.h), | ||||
|           Wrap( | ||||
|             direction: Axis.horizontal, | ||||
|             spacing: 6.h, | ||||
|             runSpacing: 6.h, | ||||
|             children: [ | ||||
|               Row( | ||||
|                 mainAxisSize: MainAxisSize.min, | ||||
|                 children: [ | ||||
|                   CustomButton( | ||||
|                     text: "${LocaleKeys.route.tr(context: context)}: ${isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].route}", | ||||
|                     onPressed: () {}, | ||||
|                     backgroundColor: AppColors.greyColor, | ||||
|                     borderColor: AppColors.greyColor, | ||||
|                     textColor: AppColors.blackColor, | ||||
|                     fontSize: 10, | ||||
|                     fontWeight: FontWeight.w500, | ||||
|                     borderRadius: 8, | ||||
|                     padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||
|                     height: 30.h, | ||||
|                   ).toShimmer2(isShow: isLoading), | ||||
|                 ], | ||||
|               ), | ||||
|               Row( | ||||
|                 mainAxisSize: MainAxisSize.min, | ||||
|                 children: [ | ||||
|                   CustomButton( | ||||
|                     text: "${LocaleKeys.frequency.tr(context: context)}: ${isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].frequency}", | ||||
|                     onPressed: () {}, | ||||
|                     backgroundColor: AppColors.greyColor, | ||||
|                     borderColor: AppColors.greyColor, | ||||
|                     textColor: AppColors.blackColor, | ||||
|                     fontSize: 10, | ||||
|                     fontWeight: FontWeight.w500, | ||||
|                     borderRadius: 8, | ||||
|                     padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||
|                     height: 30.h, | ||||
|                   ).toShimmer2(isShow: isLoading), | ||||
|                 ], | ||||
|               ), | ||||
|               Row( | ||||
|                 mainAxisSize: MainAxisSize.min, | ||||
|                 children: [ | ||||
|                   CustomButton( | ||||
|                     text: "${LocaleKeys.dailyDoses.tr(context: context)}: ${isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].doseDailyQuantity}", | ||||
|                     onPressed: () {}, | ||||
|                     backgroundColor: AppColors.greyColor, | ||||
|                     borderColor: AppColors.greyColor, | ||||
|                     textColor: AppColors.blackColor, | ||||
|                     fontSize: 10, | ||||
|                     fontWeight: FontWeight.w500, | ||||
|                     borderRadius: 8, | ||||
|                     padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||
|                     height: 30.h, | ||||
|                   ).toShimmer2(isShow: isLoading), | ||||
|                 ], | ||||
|               ), | ||||
|               Row( | ||||
|                 mainAxisSize: MainAxisSize.min, | ||||
|                 children: [ | ||||
|                   CustomButton( | ||||
|                     text: "${LocaleKeys.days.tr(context: context)}: ${isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].days}", | ||||
|                     onPressed: () {}, | ||||
|                     backgroundColor: AppColors.greyColor, | ||||
|                     borderColor: AppColors.greyColor, | ||||
|                     textColor: AppColors.blackColor, | ||||
|                     fontSize: 10, | ||||
|                     fontWeight: FontWeight.w500, | ||||
|                     borderRadius: 8, | ||||
|                     padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||
|                     height: 30.h, | ||||
|                   ).toShimmer2(isShow: isLoading), | ||||
|                 ], | ||||
|               ), | ||||
|             ], | ||||
|           ).paddingSymmetrical(16.h, 0.h), | ||||
|           SizedBox(height: 8.h), | ||||
|           if (!isLoading) | ||||
|             Row( | ||||
|               crossAxisAlignment: CrossAxisAlignment.start, | ||||
|               children: [ | ||||
|                 Utils.buildSvgWithAssets(icon: AppAssets.prescription_remarks_icon, width: 18.h, height: 18.h), | ||||
|                 SizedBox(width: 9.h), | ||||
|                 Expanded(child: "${LocaleKeys.remarks.tr(context: context)}: ${isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].remarks!}".toText10(isBold: true)), | ||||
|               ], | ||||
|             ).paddingSymmetrical(16.h, 0.h), | ||||
|           SizedBox(height: 14.h), | ||||
|           Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.05), height: 1.h), | ||||
|           SizedBox(height: 14.h), | ||||
|           Row( | ||||
|             mainAxisSize: MainAxisSize.max, | ||||
|             children: [ | ||||
|               Utils.buildSvgWithAssets(icon: AppAssets.prescription_reminder_icon, width: 35.h, height: 35.h).toShimmer2(isShow: isLoading), | ||||
|               SizedBox(width: 8.h), | ||||
|               Column( | ||||
|                 crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                 children: [ | ||||
|                   LocaleKeys.setReminder.tr(context: context).toText13(isBold: true), | ||||
|                   "Notify me before the consumption time".toText10(color: AppColors.textColorLight), | ||||
|                 ], | ||||
|               ).toShimmer2(isShow: isLoading).expanded, | ||||
|               Switch( | ||||
|                 activeColor: AppColors.successColor, | ||||
|                 activeTrackColor: AppColors.successColor.withValues(alpha: .15), | ||||
|                 value: isLoading ? false : prescriptionVM.prescriptionDetailsList[index].hasReminder!, | ||||
|                 onChanged: (newValue) async { | ||||
|                   if (prescriptionVM.prescriptionDetailsList[index].hasReminder ?? false) { | ||||
|                     await checkAndRemove(prescriptionVM.prescriptionDetailsList[index].hasReminder, delete: true); | ||||
|                     prescriptionVM.notify(); | ||||
|                     return; | ||||
|                   } | ||||
| 
 | ||||
|                   DateTime startDate = DateTime.now(); | ||||
|                   DateTime endDate = DateTime(startDate.year, startDate.month, startDate.day + prescriptionVM.prescriptionDetailsList[index].days!.toInt()); | ||||
|                   showReminderBottomSheet( | ||||
|                     context, | ||||
|                     endDate, | ||||
|                     "", | ||||
|                     prescriptionVM.prescriptionDetailsList[index].itemID.toString(), | ||||
|                     "", | ||||
|                     "", | ||||
|                     title: "${prescriptionVM.prescriptionDetailsList[index].itemDescription} Prescription Reminder", | ||||
|                     description: | ||||
|                         "${prescriptionVM.prescriptionDetailsList[index].itemDescription} ${prescriptionVM.prescriptionDetailsList[index].frequency} ${prescriptionVM.prescriptionDetailsList[index].route} ", | ||||
|                     onSuccess: () { | ||||
|                       prescriptionVM.setPrescriptionItemReminder(newValue, prescriptionVM.prescriptionDetailsList[index]); | ||||
|                     }, | ||||
|                     isMultiAllowed: true, | ||||
|                     onMultiDateSuccess: (int selectedIndex) { | ||||
|                       setCalender(context, | ||||
|                           eventId: prescriptionVM.prescriptionDetailsList[index].itemID.toString(), | ||||
|                           selectedMinutes: selectedIndex, | ||||
|                           frequencyNumber: prescriptionVM.prescriptionDetailsList[index].frequencyNumber?.toInt(), | ||||
|                           days: prescriptionVM.prescriptionDetailsList[index].days!.toInt(), | ||||
|                           orderDate: prescriptionVM.prescriptionDetailsList[index].orderDate!, | ||||
|                           itemDescriptionN: prescriptionVM.prescriptionDetailsList[index].itemDescription!, | ||||
|                           route: prescriptionVM.prescriptionDetailsList[index].route!); | ||||
|                     }, | ||||
|                   ); | ||||
|                 }, | ||||
|               ).toShimmer2(isShow: isLoading), | ||||
|             ], | ||||
|           ).paddingSymmetrical(16.h, 0.h), | ||||
|           SizedBox(height: 14.h), | ||||
|           Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.05), height: 1.h), | ||||
|           Row( | ||||
|             children: [ | ||||
|               Expanded( | ||||
|                 child: CustomButton( | ||||
|                   text: LocaleKeys.checkAvailability.tr(context: context), | ||||
|                   onPressed: () {}, | ||||
|                   backgroundColor: AppColors.primaryRedColor.withOpacity(0.1), | ||||
|                   borderColor: AppColors.primaryRedColor.withOpacity(0.0), | ||||
|                   textColor: AppColors.primaryRedColor, | ||||
|                   fontSize: 13, | ||||
|                   fontWeight: FontWeight.w500, | ||||
|                   borderRadius: 12, | ||||
|                   padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||
|                   height: 40.h, | ||||
|                 ).toShimmer2(isShow: isLoading), | ||||
|               ), | ||||
|               SizedBox(width: 16.h), | ||||
|               Expanded( | ||||
|                 child: CustomButton( | ||||
|                   text: LocaleKeys.readInstructions.tr(context: context), | ||||
|                   onPressed: () {}, | ||||
|                   backgroundColor: AppColors.primaryRedColor, | ||||
|                   borderColor: AppColors.primaryRedColor, | ||||
|                   textColor: AppColors.whiteColor, | ||||
|                   fontSize: 13, | ||||
|                   fontWeight: FontWeight.w500, | ||||
|                   borderRadius: 12, | ||||
|                   padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||
|                   height: 40.h, | ||||
|                 ).toShimmer2(isShow: isLoading), | ||||
|               ), | ||||
|             ], | ||||
|           ).paddingSymmetrical(16.h, 16.h), | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue