|  |  |  | 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/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/theme/colors.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void showCommonBottomSheet(BuildContext context, | 
					
						
							|  |  |  |     {required Widget child, | 
					
						
							|  |  |  |     Function(String?)? callBackFunc, | 
					
						
							|  |  |  |     String? title, | 
					
						
							|  |  |  |     required double height, | 
					
						
							|  |  |  |     bool isCloseButtonVisible = true, | 
					
						
							|  |  |  |     bool isFullScreen = true, | 
					
						
							|  |  |  |     bool isDismissible = true, | 
					
						
							|  |  |  |     bool isSuccessDialog = false}) { | 
					
						
							|  |  |  |   showModalBottomSheet<String>( | 
					
						
							|  |  |  |       sheetAnimationStyle: AnimationStyle( | 
					
						
							|  |  |  |         duration: Duration(milliseconds: 500), // Custom animation duration
 | 
					
						
							|  |  |  |         reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration
 | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |       context: context, | 
					
						
							|  |  |  |       isScrollControlled: true, | 
					
						
							|  |  |  |       showDragHandle: false, | 
					
						
							|  |  |  |       isDismissible: isDismissible, | 
					
						
							|  |  |  |       backgroundColor: isSuccessDialog ? AppColors.whiteColor : AppColors.scaffoldBgColor, | 
					
						
							|  |  |  |       builder: (BuildContext context) { | 
					
						
							|  |  |  |         return Container( | 
					
						
							|  |  |  |           height: height, | 
					
						
							|  |  |  |           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.scaffoldBgColor, borderRadius: 24.h), | 
					
						
							|  |  |  |           child: ButtonSheetContent( | 
					
						
							|  |  |  |             title: title!, | 
					
						
							|  |  |  |             isCloseButtonVisible: isCloseButtonVisible, | 
					
						
							|  |  |  |             isFullScreen: isFullScreen, | 
					
						
							|  |  |  |             child: child, | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       }).then((value) { | 
					
						
							|  |  |  |     if (value != null) { | 
					
						
							|  |  |  |       callBackFunc!(value); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ButtonSheetContent extends StatelessWidget { | 
					
						
							|  |  |  |   final Widget child; | 
					
						
							|  |  |  |   final String title; | 
					
						
							|  |  |  |   final bool isCloseButtonVisible; | 
					
						
							|  |  |  |   final bool isFullScreen; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const ButtonSheetContent({super.key, required this.child, required this.isCloseButtonVisible, required this.title, required this.isFullScreen}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     return Column( | 
					
						
							|  |  |  |       crossAxisAlignment: CrossAxisAlignment.center, | 
					
						
							|  |  |  |       children: [ | 
					
						
							|  |  |  |         // SizedBox(
 | 
					
						
							|  |  |  |         //   height: 20.h,
 | 
					
						
							|  |  |  |         // ),
 | 
					
						
							|  |  |  |         // Center(
 | 
					
						
							|  |  |  |         //   child: Container(
 | 
					
						
							|  |  |  |         //     margin: const EdgeInsets.only(top: 18, bottom: 12),
 | 
					
						
							|  |  |  |         //     height: 4,
 | 
					
						
							|  |  |  |         //     width: 40.h,
 | 
					
						
							|  |  |  |         //     decoration: BoxDecoration(
 | 
					
						
							|  |  |  |         //       color: Colors.grey[400],
 | 
					
						
							|  |  |  |         //       borderRadius: BorderRadius.circular(2),
 | 
					
						
							|  |  |  |         //     ),
 | 
					
						
							|  |  |  |         //   ),
 | 
					
						
							|  |  |  |         // ),
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Close button
 | 
					
						
							|  |  |  |         isCloseButtonVisible && isFullScreen | 
					
						
							|  |  |  |             ? Column(children: [ | 
					
						
							|  |  |  |                 SizedBox( | 
					
						
							|  |  |  |                   height: 40.h, | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 Padding( | 
					
						
							|  |  |  |                   padding: EdgeInsets.symmetric( | 
					
						
							|  |  |  |                     horizontal: 16, | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                   child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32, height: 32).onPress(() { | 
					
						
							|  |  |  |                     Navigator.of(context).pop(); | 
					
						
							|  |  |  |                   }), | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |               ]) | 
					
						
							|  |  |  |             : SizedBox(), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         isFullScreen | 
					
						
							|  |  |  |             ? Column( | 
					
						
							|  |  |  |                 children: [ | 
					
						
							|  |  |  |                   SizedBox(height: 20.h), | 
					
						
							|  |  |  |                   Padding(padding: EdgeInsets.symmetric(horizontal: 16.h), child: title.toText24(isBold: true)), | 
					
						
							|  |  |  |                   SizedBox(height: 16.h), | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |               ) | 
					
						
							|  |  |  |             : SizedBox(), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Expanded(child: child) | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void showCommonBottomSheetWithoutHeight( | 
					
						
							|  |  |  |     BuildContext context, { | 
					
						
							|  |  |  |       required Widget child, | 
					
						
							|  |  |  |       required VoidCallback callBackFunc, | 
					
						
							|  |  |  |       String title = "", | 
					
						
							|  |  |  |       bool isCloseButtonVisible = true, | 
					
						
							|  |  |  |       bool isFullScreen = true, | 
					
						
							|  |  |  |       bool isDismissible = true, | 
					
						
							|  |  |  |       Widget? titleWidget, | 
					
						
							|  |  |  |       bool useSafeArea = false, | 
					
						
							|  |  |  |     }) { | 
					
						
							|  |  |  |   showModalBottomSheet<String>( | 
					
						
							|  |  |  |     sheetAnimationStyle: AnimationStyle( | 
					
						
							|  |  |  |       duration: Duration(milliseconds: 500), | 
					
						
							|  |  |  |       reverseDuration: Duration(milliseconds: 300), | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     context: context, | 
					
						
							|  |  |  |     isScrollControlled: true, | 
					
						
							|  |  |  |     showDragHandle: false, | 
					
						
							|  |  |  |     isDismissible: isDismissible, | 
					
						
							|  |  |  |     backgroundColor: AppColors.bottomSheetBgColor, | 
					
						
							|  |  |  |     useSafeArea: useSafeArea, | 
					
						
							|  |  |  |     builder: (BuildContext context) { | 
					
						
							|  |  |  |       return SafeArea( | 
					
						
							|  |  |  |         top: false, | 
					
						
							|  |  |  |         left: false, | 
					
						
							|  |  |  |         right: false, | 
					
						
							|  |  |  |         child: Padding( | 
					
						
							|  |  |  |           padding: EdgeInsets.only( | 
					
						
							|  |  |  |             bottom: MediaQuery.of(context).viewInsets.bottom, | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |           child: SingleChildScrollView( | 
					
						
							|  |  |  |             physics: ClampingScrollPhysics(), | 
					
						
							|  |  |  |             child: isCloseButtonVisible | 
					
						
							|  |  |  |                 ? Container( | 
					
						
							|  |  |  |               padding: EdgeInsets.only( | 
					
						
							|  |  |  |                 left: 24, | 
					
						
							|  |  |  |                 top: 24, | 
					
						
							|  |  |  |                 right: 24, | 
					
						
							|  |  |  |                 bottom: 12, | 
					
						
							|  |  |  |               ), | 
					
						
							|  |  |  |               decoration: RoundedRectangleBorder().toSmoothCornerDecoration( | 
					
						
							|  |  |  |                 color: AppColors.bottomSheetBgColor, | 
					
						
							|  |  |  |                 borderRadius: 24.h, | 
					
						
							|  |  |  |               ), | 
					
						
							|  |  |  |               child: Column( | 
					
						
							|  |  |  |                 mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |                 children: [ | 
					
						
							|  |  |  |                   Row( | 
					
						
							|  |  |  |                     mainAxisAlignment: MainAxisAlignment.spaceBetween, | 
					
						
							|  |  |  |                     crossAxisAlignment: CrossAxisAlignment.center, | 
					
						
							|  |  |  |                     children: [ | 
					
						
							|  |  |  |                       titleWidget ?? | 
					
						
							|  |  |  |                           Expanded( | 
					
						
							|  |  |  |                             child: title.toText20(weight: FontWeight.w600), | 
					
						
							|  |  |  |                           ), | 
					
						
							|  |  |  |                       Utils.buildSvgWithAssets( | 
					
						
							|  |  |  |                         icon: AppAssets.close_bottom_sheet_icon, | 
					
						
							|  |  |  |                         iconColor: Color(0xff2B353E), | 
					
						
							|  |  |  |                       ).onPress(() { | 
					
						
							|  |  |  |                         Navigator.of(context).pop(); | 
					
						
							|  |  |  |                       }), | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                   SizedBox(height: 16.h), | 
					
						
							|  |  |  |                   child, | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |               ), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |                 : child, | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ).then((value) { | 
					
						
							|  |  |  |     callBackFunc(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // void showCommonBottomSheetWithoutHeight(
 | 
					
						
							|  |  |  | //   BuildContext context, {
 | 
					
						
							|  |  |  | //   required Widget child,
 | 
					
						
							|  |  |  | //   required VoidCallback callBackFunc,
 | 
					
						
							|  |  |  | //   String title = "",
 | 
					
						
							|  |  |  | //   bool isCloseButtonVisible = true,
 | 
					
						
							|  |  |  | //   bool isFullScreen = true,
 | 
					
						
							|  |  |  | //   bool isDismissible = true,
 | 
					
						
							|  |  |  | //   Widget? titleWidget,
 | 
					
						
							|  |  |  | //   bool useSafeArea = false,
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // }) {
 | 
					
						
							|  |  |  | //   showModalBottomSheet<String>(
 | 
					
						
							|  |  |  | //       sheetAnimationStyle: AnimationStyle(
 | 
					
						
							|  |  |  | //         duration: Duration(milliseconds: 500), // Custom animation duration
 | 
					
						
							|  |  |  | //         reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration
 | 
					
						
							|  |  |  | //       ),
 | 
					
						
							|  |  |  | //       context: context,
 | 
					
						
							|  |  |  | //       isScrollControlled: true,
 | 
					
						
							|  |  |  | //       showDragHandle: false,
 | 
					
						
							|  |  |  | //       isDismissible: isDismissible,
 | 
					
						
							|  |  |  | //       backgroundColor: AppColors.bottomSheetBgColor,
 | 
					
						
							|  |  |  | //       useSafeArea: useSafeArea,
 | 
					
						
							|  |  |  | //       builder: (BuildContext context) {
 | 
					
						
							|  |  |  | //         return SafeArea(
 | 
					
						
							|  |  |  | //           top: false,
 | 
					
						
							|  |  |  | //           left: false,
 | 
					
						
							|  |  |  | //           right: false,
 | 
					
						
							|  |  |  | //           child: isCloseButtonVisible
 | 
					
						
							|  |  |  | //               ? Container(
 | 
					
						
							|  |  |  | //                   padding: EdgeInsets.only(left: 24, top: 24, right: 24, bottom: 12),
 | 
					
						
							|  |  |  | //                   decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.bottomSheetBgColor, borderRadius: 24.h),
 | 
					
						
							|  |  |  | //                   child: Column(
 | 
					
						
							|  |  |  | //                     mainAxisSize: MainAxisSize.min,
 | 
					
						
							|  |  |  | //                     spacing: 16.h,
 | 
					
						
							|  |  |  | //                     children: [
 | 
					
						
							|  |  |  | //                       Row(
 | 
					
						
							|  |  |  | //                         mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | 
					
						
							|  |  |  | //                         crossAxisAlignment: CrossAxisAlignment.center,
 | 
					
						
							|  |  |  | //                         children: [
 | 
					
						
							|  |  |  | //                           titleWidget ?? Expanded(child: title.toText20(weight: FontWeight.w600)),
 | 
					
						
							|  |  |  | //                           Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, iconColor: Color(0xff2B353E)).onPress(() {
 | 
					
						
							|  |  |  | //                             Navigator.of(context).pop();
 | 
					
						
							|  |  |  | //                           }),
 | 
					
						
							|  |  |  | //                         ],
 | 
					
						
							|  |  |  | //                       ),
 | 
					
						
							|  |  |  | //                       child,
 | 
					
						
							|  |  |  | //                     ],
 | 
					
						
							|  |  |  | //                   ))
 | 
					
						
							|  |  |  | //               : child,
 | 
					
						
							|  |  |  | //         );
 | 
					
						
							|  |  |  | //       }).then((value) {
 | 
					
						
							|  |  |  | //     callBackFunc();
 | 
					
						
							|  |  |  | //   });
 | 
					
						
							|  |  |  | // }
 |