From 634a138c7f91d701f89b927bc46334ea7c5071d5 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 8 Dec 2025 17:22:56 +0300 Subject: [PATCH] Queueing system screen implementation contd. --- assets/images/svg/bulb_icon.svg | 5 + assets/images/svg/call_for_doctor.svg | 4 + assets/images/svg/call_for_vitals.svg | 4 + lib/core/app_assets.dart | 3 + .../appointments/appointment_queue_page.dart | 266 ++++++++++++++++++ .../widgets/appointment_card.dart | 127 ++++----- .../book_appointment_page.dart | 10 + .../widgets/patient_insurance_card.dart | 4 +- .../medical_file/medical_file_page.dart | 46 +-- lib/widgets/appbar/collapsing_list_view.dart | 11 +- 10 files changed, 393 insertions(+), 87 deletions(-) create mode 100644 assets/images/svg/bulb_icon.svg create mode 100644 assets/images/svg/call_for_doctor.svg create mode 100644 assets/images/svg/call_for_vitals.svg create mode 100644 lib/presentation/appointments/appointment_queue_page.dart diff --git a/assets/images/svg/bulb_icon.svg b/assets/images/svg/bulb_icon.svg new file mode 100644 index 0000000..62afc17 --- /dev/null +++ b/assets/images/svg/bulb_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svg/call_for_doctor.svg b/assets/images/svg/call_for_doctor.svg new file mode 100644 index 0000000..9644d3a --- /dev/null +++ b/assets/images/svg/call_for_doctor.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svg/call_for_vitals.svg b/assets/images/svg/call_for_vitals.svg new file mode 100644 index 0000000..ceacdf5 --- /dev/null +++ b/assets/images/svg/call_for_vitals.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index f3ff8fd..5bc984a 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -178,6 +178,9 @@ class AppAssets { static const String doctor_profile_rating_icon = '$svgBasePath/doctor_profile_rating_icon.svg'; static const String doctor_profile_reviews_icon = '$svgBasePath/doctor_profile_reviews_icon.svg'; static const String waiting_appointment_icon = '$svgBasePath/waitingAppo.svg'; + static const String call_for_vitals = '$svgBasePath/call_for_vitals.svg'; + static const String call_for_doctor = '$svgBasePath/call_for_doctor.svg'; + static const String bulb_icon = '$svgBasePath/bulb_icon.svg'; //bottom navigation// diff --git a/lib/presentation/appointments/appointment_queue_page.dart b/lib/presentation/appointments/appointment_queue_page.dart new file mode 100644 index 0000000..c2765a2 --- /dev/null +++ b/lib/presentation/appointments/appointment_queue_page.dart @@ -0,0 +1,266 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/size_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/presentation/home/navigation_screen.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; + +class AppointmentQueuePage extends StatelessWidget { + AppointmentQueuePage({super.key}); + + AppState? appState; + int currentQueueStatus = 0; + + @override + Widget build(BuildContext context) { + currentQueueStatus = 1; + appState = getIt.get(); + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + body: Column( + children: [ + Expanded( + child: CollapsingListView( + title: "Queueing".needTranslation, + child: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.all(24.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: false, + side: BorderSide(color: getCardBorderColor(), width: 2.w), + ), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + AppCustomChipWidget( + labelText: currentQueueStatus == 0 ? "In Queue".needTranslation : "Your Turn".needTranslation, + backgroundColor: getCardBorderColor().withValues(alpha: 0.20), + textColor: getCardBorderColor(), + ), + Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h), + ], + ), + SizedBox(height: 10.h), + "Hala ${appState!.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true), + SizedBox(height: 8.h), + "Thank you for your patience, here is your queue number.".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), + SizedBox(height: 8.h), + "IMD W-A-2".needTranslation.toText32(isBold: true), + SizedBox(height: 8.h), + CustomButton( + text: getCardButtonText(), + onPressed: () {}, + backgroundColor: getCardButtonColor(), + borderColor: getCardButtonColor().withValues(alpha: 0.01), + textColor: getCardButtonTextColor(), + fontSize: 12.f, + fontWeight: FontWeight.w600, + borderRadius: 12.r, + padding: EdgeInsets.symmetric(horizontal: 10.w), + height: 40.h, + iconColor: AppColors.whiteColor, + iconSize: 18.h, + ), + ], + ), + ), + ), + SizedBox(height: 16.h), + Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: true, + ), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Serving Now".needTranslation.toText16(isBold: true), + SizedBox(height: 18.h), + ListView.separated( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: 3, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (BuildContext context, int index) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "IMD W-A-2".needTranslation.toText17(isBold: true), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + "Room: S2".toText12(fontWeight: FontWeight.w500), + SizedBox(width: 8.w), + AppCustomChipWidget( + deleteIcon: AppAssets.call_for_vitals, + labelText: "Call for vital signs".needTranslation, + iconColor: AppColors.primaryRedColor, + textColor: AppColors.primaryRedColor, + iconSize: 14.w, + backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.1), + labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: -2.h), + ), + ], + ), + ], + ); + }, + separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 8.h), + ), + ], + ), + ), + ), + SizedBox(height: 16.h), + Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: true, + ), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Utils.buildSvgWithAssets(icon: AppAssets.bulb_icon, width: 24.w, height: 24.h), + SizedBox(width: 8.w), + "Things to ask your doctor today".needTranslation.toText16(isBold: true), + ], + ), + SizedBox(height: 8.h), + + // What can I do to improve my overall health? + // Are there any routine screenings I should get? + // What is this medication for? + // Are there any side effects I should know about? + // When should I come back for a follow-up? + + "• ${"What can I do to improve my overall health?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), + SizedBox(height: 4.h), + "• ${"Are there any routine screenings I should get?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), + SizedBox(height: 4.h), + "• ${"What is this medication for?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), + SizedBox(height: 4.h), + "• ${"Are there any side effects I should know about?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), + SizedBox(height: 4.h), + "• ${"When should I come back for a follow-up?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), + + SizedBox(height: 16.h), + ], + ), + ), + ), + ], + ), + ), + ), + ), + ), + Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24.r, + hasShadow: true, + ), + child: CustomButton( + text: "Go to homepage".needTranslation, + onPressed: () { + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }, + backgroundColor: AppColors.primaryRedColor, + borderColor: AppColors.primaryRedColor, + textColor: AppColors.whiteColor, + fontSize: 16.f, + fontWeight: FontWeight.w500, + borderRadius: 12.r, + padding: EdgeInsets.symmetric(horizontal: 10.w), + height: 50.h, + icon: AppAssets.homeBottom, + iconColor: AppColors.whiteColor, + iconSize: 18.h, + ).paddingSymmetrical(16.h, 24.h), + ) + ], + ), + ); + } + + Color getCardBorderColor() { + switch (currentQueueStatus) { + case 0: + return AppColors.ratingColorYellow; + case 1: + return AppColors.primaryRedColor; + case 2: + return AppColors.successColor; + } + return AppColors.textColor; + } + + Color getCardButtonColor() { + switch (currentQueueStatus) { + case 0: + return AppColors.textColor.withValues(alpha: 0.08); + case 1: + return AppColors.primaryRedColor; + case 2: + return AppColors.successColor; + } + return AppColors.primaryRedColor; + } + + Color getCardButtonTextColor() { + switch (currentQueueStatus) { + case 0: + return Color(0xFFA2A2A2); + case 1: + return AppColors.whiteColor; + case 2: + return AppColors.whiteColor; + } + return AppColors.primaryRedColor; + } + + String getCardButtonText() { + switch (currentQueueStatus) { + case 0: + return "Please wait! you will be called for vital signs".needTranslation; + case 1: + return "Please visit Room S5 for vital signs".needTranslation; + case 2: + return "Please visit Room S5 to the Doctor".needTranslation; + } + return ""; + } +} diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart index 7bc9c62..a629944 100644 --- a/lib/presentation/appointments/widgets/appointment_card.dart +++ b/lib/presentation/appointments/widgets/appointment_card.dart @@ -17,6 +17,7 @@ import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_vie import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart'; +import 'package:hmg_patient_app_new/presentation/appointments/appointment_queue_page.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/ask_doctor_request_type_select.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/eye_measurement_details_page.dart'; @@ -26,6 +27,7 @@ import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; +import 'package:smooth_corner/smooth_corner.dart'; class AppointmentCard extends StatelessWidget { final PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel; @@ -124,47 +126,33 @@ class AppointmentCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Stack( - children: [ - Image.network( - isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!, - width: 63.w, - height: 63.h, - fit: BoxFit.cover, - ), - Positioned( - bottom: 0, - left: 0, - right: 0, - child: Container( - width: 63.w, - height: 20, - color: AppColors.textColorLight.withValues(alpha: 0.25), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Utils.buildSvgWithAssets( - icon: AppAssets.rating_icon, - width: 12.w, - height: 12.h, - fit: BoxFit.contain, - ), - SizedBox(width: 4.w), - isLoading ? "Rating".toText12() : patientAppointmentHistoryResponseModel.decimalDoctorRate.toString().toText12(), - ], - ), - ), - ) - ], + Image.network( + isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!, + width: 63.w, + height: 63.h, + fit: BoxFit.cover, ).circle(100).toShimmer2(isShow: isLoading), - // SizedBox(height: 12.h), - // AppCustomChipWidget( - // icon: AppAssets.rating_icon, - // iconColor: AppColors.ratingColorYellow, - // labelText: isLoading ? "Rating" : "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}".needTranslation) - // .toShimmer2(isShow: isLoading), + Transform.translate( + offset: Offset(0.0, -20.h), + child: Container( + width: 40.w, + height: 40.h, + decoration: BoxDecoration( + color: AppColors.whiteColor, + shape: BoxShape.circle, // Makes the container circular + border: Border.all( + color: AppColors.scaffoldBgColor, // Color of the border + width: 1.5.w, // Width of the border + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h), SizedBox(height: 2.h), "4.7".toText11(isBold: true, color: AppColors.textColor)], + ), + ).circle(100).toShimmer2(isShow: isLoading), + ), ], ), SizedBox(width: 16.h), @@ -304,34 +292,41 @@ class AppointmentCard extends StatelessWidget { if (isRecent) { return CustomButton( text: LocaleKeys.askDoctor.tr(context: context), - onPressed: () async { - LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation); - await myAppointmentsViewModel.isDoctorAvailable( - projectID: patientAppointmentHistoryResponseModel.projectID, - doctorId: patientAppointmentHistoryResponseModel.doctorID, - clinicId: patientAppointmentHistoryResponseModel.clinicID, - onSuccess: (value) async { - if (value) { - await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) { - LoaderBottomSheet.hideLoader(); - showCommonBottomSheetWithoutHeight( - context, - title: LocaleKeys.askDoctor.tr(context: context), - child: AskDoctorRequestTypeSelect( - askDoctorRequestTypeList: myAppointmentsViewModel.askDoctorRequestTypeList, - myAppointmentsViewModel: myAppointmentsViewModel, - patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel, - ), - callBackFunc: () {}, - isFullScreen: false, - isCloseButtonVisible: true, - ); - }); - } else { - print("Doctor is not available"); - } - }); + onPressed: () { + Navigator.of(context).push( + CustomPageRoute( + page: AppointmentQueuePage(), + ), + ); }, + // onPressed: () async { + // LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation); + // await myAppointmentsViewModel.isDoctorAvailable( + // projectID: patientAppointmentHistoryResponseModel.projectID, + // doctorId: patientAppointmentHistoryResponseModel.doctorID, + // clinicId: patientAppointmentHistoryResponseModel.clinicID, + // onSuccess: (value) async { + // if (value) { + // await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) { + // LoaderBottomSheet.hideLoader(); + // showCommonBottomSheetWithoutHeight( + // context, + // title: LocaleKeys.askDoctor.tr(context: context), + // child: AskDoctorRequestTypeSelect( + // askDoctorRequestTypeList: myAppointmentsViewModel.askDoctorRequestTypeList, + // myAppointmentsViewModel: myAppointmentsViewModel, + // patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel, + // ), + // callBackFunc: () {}, + // isFullScreen: false, + // isCloseButtonVisible: true, + // ); + // }); + // } else { + // print("Doctor is not available"); + // } + // }); + // }, backgroundColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor, textColor: AppColors.primaryRedColor, diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart index 8a0f7e7..0ad58cc 100644 --- a/lib/presentation/book_appointment/book_appointment_page.dart +++ b/lib/presentation/book_appointment/book_appointment_page.dart @@ -25,6 +25,7 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/immed import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/search_doctor_by_name.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart'; +import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; @@ -72,6 +73,15 @@ class _BookAppointmentPageState extends State { backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( title: LocaleKeys.bookAppo.tr(context: context), + isLeading: true, + leadingCallback: () { + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }, child: SingleChildScrollView( child: Consumer(builder: (context, bookAppointmentsVM, child) { return Column( diff --git a/lib/presentation/insurance/widgets/patient_insurance_card.dart b/lib/presentation/insurance/widgets/patient_insurance_card.dart index 5190e5b..3d774d3 100644 --- a/lib/presentation/insurance/widgets/patient_insurance_card.dart +++ b/lib/presentation/insurance/widgets/patient_insurance_card.dart @@ -34,7 +34,7 @@ class PatientInsuranceCard extends StatelessWidget { width: double.infinity, decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, - borderRadius: 24, + borderRadius: 24.r, ), child: Padding( padding: EdgeInsets.all(16.h), @@ -112,6 +112,6 @@ class PatientInsuranceCard extends StatelessWidget { ], ), ), - ).paddingSymmetrical(24.h, 0.h); + ).paddingSymmetrical(0.h, 0.h); } } diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index 4dbc659..5cfbcb9 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -30,6 +30,7 @@ import 'package:hmg_patient_app_new/presentation/appointments/my_doctors_page.da import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; +import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/presentation/insurance/insurance_approvals_page.dart'; import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart'; import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_update_details_card.dart'; @@ -109,25 +110,30 @@ class _MedicalFilePageState extends State { trailing: Row( children: [ Wrap( + spacing: -8.h, + // runSpacing: 0.h, children: [ Utils.buildImgWithAssets( icon: AppAssets.babyGirlImg, - height: 32.h, - border: 1.5, + height: 28.h, + width: 28.w, + border: 1, fit: BoxFit.contain, borderRadius: 50.r, ), Utils.buildImgWithAssets( icon: AppAssets.femaleImg, - height: 32.h, - border: 1.5, + height: 28.h, + width: 28.w, + border: 1, borderRadius: 50.r, fit: BoxFit.contain, ), Utils.buildImgWithAssets( icon: AppAssets.male_img, - height: 32.h, - border: 1.5, + height: 28.h, + width: 28.w, + border: 1, borderRadius: 50.r, fit: BoxFit.contain, ), @@ -146,7 +152,15 @@ class _MedicalFilePageState extends State { }, profiles: medicalFileViewModel.patientFamilyFiles); }), - isLeading: false, + isLeading: true, + leadingCallback: () { + Navigator.pushAndRemoveUntil( + navigationService.navigatorKey.currentContext!, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -177,7 +191,7 @@ class _MedicalFilePageState extends State { children: [ AppCustomChipWidget( icon: AppAssets.file_icon, - labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}", + labelText: "${LocaleKeys.fileno.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}", labelPadding: EdgeInsetsDirectional.only(end: 6.w), onChipTap: () { navigationService.pushPage( @@ -215,7 +229,8 @@ class _MedicalFilePageState extends State { icon: AppAssets.blood_icon, labelText: "Blood: ${appState.getUserBloodGroup.isEmpty ? "N/A" : appState.getUserBloodGroup.isEmpty}", iconColor: AppColors.primaryRedColor, - labelPadding: EdgeInsetsDirectional.only(end: 8.w), + labelPadding: EdgeInsetsDirectional.only(end: 4.w), + padding: EdgeInsets.zero, ), Consumer(builder: (context, insuranceVM, child) { return AppCustomChipWidget( @@ -535,10 +550,7 @@ class _MedicalFilePageState extends State { ? const CommonShimmerWidget().paddingSymmetrical(0.w, 0.h) : prescriptionVM.patientPrescriptionOrders.isNotEmpty ? Container( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: Colors.white, - borderRadius: 12.r, - ), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: Colors.white, borderRadius: 20.r, hasShadow: false), child: Padding( padding: EdgeInsets.all(16.w), child: Column( @@ -608,9 +620,9 @@ class _MedicalFilePageState extends State { }, separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h), ), - SizedBox(height: 24.h), + SizedBox(height: 16.h), const Divider(color: AppColors.dividerColor), - SizedBox(height: 24.h), + SizedBox(height: 16.h), Row( children: [ Expanded( @@ -635,7 +647,7 @@ class _MedicalFilePageState extends State { iconSize: 16.w, ), ), - SizedBox(width: 10.w), + SizedBox(width: 6.w), Expanded( child: CustomButton( text: "All Medications".needTranslation, @@ -657,7 +669,7 @@ class _MedicalFilePageState extends State { ], ), ), - ).paddingSymmetrical(24.w, 0.h) + ).paddingSymmetrical(0.w, 0.h) : Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart index 734fe0f..cf711a0 100644 --- a/lib/widgets/appbar/collapsing_list_view.dart +++ b/lib/widgets/appbar/collapsing_list_view.dart @@ -25,6 +25,7 @@ class CollapsingListView extends StatelessWidget { Widget? trailing; bool isClose; bool isLeading; + VoidCallback? leadingCallback; CollapsingListView({ super.key, @@ -40,7 +41,7 @@ class CollapsingListView extends StatelessWidget { this.requests, this.isLeading = true, this.trailing, - }); + this.leadingCallback}); @override Widget build(BuildContext context) { @@ -65,7 +66,13 @@ class CollapsingListView extends StatelessWidget { child: IconButton( icon: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.closeBottomNav : AppAssets.arrow_back, width: 32.h, height: 32.h), padding: EdgeInsets.only(left: 12), - onPressed: () => Navigator.pop(context), + onPressed: () { + if(leadingCallback != null) { + leadingCallback!(); + } else { + Navigator.pop(context); + } + }, highlightColor: Colors.transparent, ), )