You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			220 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			220 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
| 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),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |