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