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.
		
		
		
		
		
			
		
			
				
	
	
		
			234 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			234 lines
		
	
	
		
			11 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),
 | 
						|
              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),
 | 
						|
        ],
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |