|  |  |  | 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),
 | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           ).paddingSymmetrical(16.h, 16.h), | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |