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/utils/size_utils.dart'; import 'package:hmg_patient_app_new/extensions/route_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/bottomsheet/exception_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/family_files/family_file_add_widget.dart'; abstract class DialogService { Future showErrorBottomSheet({String title = "", required String message, Function()? onOkPressed, Function()? onCancelPressed}); Future showExceptionBottomSheet({required String message, required Function() onOkPressed, Function()? onCancelPressed}); Future showCommonBottomSheetWithoutH({String? label, required String message, required Function() onOkPressed, Function()? onCancelPressed}); Future showFamilyBottomSheetWithoutH( {String? label, required String message, required Function(FamilyFileResponseModelLists response) onSwitchPress, required List profiles}); Future showFamilyBottomSheetWithoutHWithChild({String? label, required String message, Widget? child, required Function() onOkPressed, Function()? onCancelPressed}); Future showPhoneNumberPickerSheet({String? label, String? message, required Function() onSMSPress, required Function() onWhatsappPress}); Future showAddFamilyFileSheet({String? label, String? message, required Function() onVerificationPress}); // TODO : Need to be Fixed showPhoneNumberPickerSheet ( From Login ADn Signup Bottom Sheet Move Here } class DialogServiceImp implements DialogService { final NavigationService navigationService; bool _isErrorSheetShowing = false; DialogServiceImp({required this.navigationService}); @override Future showErrorBottomSheet({String title = "", required String message, Function()? onOkPressed, Function()? onCancelPressed}) async { if (_isErrorSheetShowing) return; final context = navigationService.navigatorKey.currentContext; if (context == null) return; _isErrorSheetShowing = true; await showModalBottomSheet( context: context, isScrollControlled: false, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical(top: Radius.circular(16)), ), builder: (_) => ExceptionBottomSheet( // title: title, message: message, showCancel: onCancelPressed != null ? true : false, onOkPressed: () { if (onOkPressed != null) { onOkPressed(); } }, onCancelPressed: () { if (onCancelPressed != null) { context.pop(); } }, ), ); _isErrorSheetShowing = false; } @override Future showExceptionBottomSheet({required String message, required Function() onOkPressed, Function()? onCancelPressed}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; await showModalBottomSheet( context: context, isScrollControlled: false, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical(top: Radius.circular(16)), ), builder: (_) => ExceptionBottomSheet( message: message, showCancel: onCancelPressed != null ? true : false, onOkPressed: onOkPressed, onCancelPressed: () { if (onCancelPressed != null) { Navigator.of(context).pop(); } }, ), ); } @override Future showCommonBottomSheetWithoutH({String? label, required String message, required Function() onOkPressed, Function()? onCancelPressed}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: exceptionBottomSheetWidget(context: context, message: message, onOkPressed: onOkPressed, onCancelPressed: onCancelPressed), callBackFunc: () {}); } @override Future showFamilyBottomSheetWithoutH( {String? label, required String message, required Function(FamilyFileResponseModelLists response) onSwitchPress, required List profiles}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: FamilyCards( profiles: profiles, onSelect: (FamilyFileResponseModelLists profile) { onSwitchPress(profile); }, onRemove: (FamilyFileResponseModelLists profile) {}, isShowDetails: false, ), callBackFunc: () {}); } @override Future showFamilyBottomSheetWithoutHWithChild({String? label, required String message, Widget? child, required Function() onOkPressed, Function()? onCancelPressed}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; showCommonBottomSheetWithoutHeight( context, title: label ?? "", child: child ?? SizedBox(), callBackFunc: () {}, ); } @override Future showPhoneNumberPickerSheet({String? label, String? message, required Function() onSMSPress, required Function() onWhatsappPress}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: showPhoneNumberPickerWidget(context: context, message: message, onSMSPress: onSMSPress, onWhatsappPress: onWhatsappPress), callBackFunc: () {}); } @override Future showAddFamilyFileSheet({String? label, String? message, required Function() onVerificationPress}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: FamilyFileAddWidget(() { onVerificationPress(); }, message ?? ""), callBackFunc: () {}); } } Widget exceptionBottomSheetWidget({required BuildContext context, required String message, required Function() onOkPressed, Function()? onCancelPressed}) { return Column( children: [ (message).toText16(isBold: false, color: AppColors.textColor), SizedBox(height: 10.h), SizedBox(height: 24.h), if (onCancelPressed != null) Row( children: [ Expanded( child: CustomButton( text: LocaleKeys.cancel.tr(), onPressed: () { Navigator.of(context).pop(); }, backgroundColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor, textColor: AppColors.primaryRedColor, icon: AppAssets.cancel, iconColor: AppColors.primaryRedColor, ), ), SizedBox(width: 5.h), Expanded( child: CustomButton( text: LocaleKeys.confirm.tr(), onPressed: onOkPressed, backgroundColor: AppColors.bgGreenColor, borderColor: AppColors.bgGreenColor, textColor: Colors.white, icon: AppAssets.confirm, ), ), ], ), if (onCancelPressed == null) Padding( padding: EdgeInsets.only(bottom: 10.h), child: CustomButton( text: LocaleKeys.ok.tr(), onPressed: (onCancelPressed == null) ? () { context.pop(); } : onOkPressed, backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedBorderColor, textColor: Colors.white, icon: AppAssets.confirm, ), ), ], ); } Widget showPhoneNumberPickerWidget({required BuildContext context, String? message, required Function() onSMSPress, required Function() onWhatsappPress}) { return StatefulBuilder(builder: (BuildContext context, StateSetter setModalState) { return Column( children: [ (message ?? "").toText16(isBold: false, color: AppColors.textColor), SizedBox(height: 10.h), Padding( padding: EdgeInsets.only(bottom: 10.h), child: CustomButton( text: LocaleKeys.sendOTPSMS.tr(), onPressed: onSMSPress, backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedBorderColor, textColor: AppColors.whiteColor, icon: AppAssets.message, ), ), Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: EdgeInsets.symmetric(horizontal: 8.h), child: LocaleKeys.oR.tr().toText16(color: AppColors.textColor), ), ], ), Padding( padding: EdgeInsets.only(bottom: 10.h, top: 10.h), child: CustomButton( text: LocaleKeys.sendOTPWHATSAPP.tr(), onPressed: onWhatsappPress, backgroundColor: Colors.white, borderColor: AppColors.borderOnlyColor, textColor: AppColors.textColor, icon: AppAssets.whatsapp, iconColor: null, ), ), ], ); //return Padding( // padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), // child: SingleChildScrollView( // child: GenericBottomSheet( // countryCode: authViewModel.selectedCountrySignup.countryCode, // initialPhoneNumber: "", // textController: authViewModel.phoneNumberController, // isEnableCountryDropdown: true, // onCountryChange: authViewModel.onCountryChange, // onChange: authViewModel.onPhoneNumberChange, // buttons: [ // // ], // ), // ), // ); }); } // Widget familyMemberAddWidget() { // AuthenticationViewModel authVm = getIt.get(); // return showCommonBottomSheetWithoutHeight(context, // title: "Add Family Member".needTranslation, // useSafeArea: true, // child: // callBackFunc: () {}); // }