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.
		
		
		
		
		
			
		
			
	
	
		
			146 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Dart
		
	
		
		
			
		
	
	
			146 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Dart
		
	
| 
											2 months ago
										 | import 'dart:io'; | ||
|  | 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/enums.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/generated/locale_keys.g.dart'; | ||
|  | import 'package:hmg_patient_app_new/widgets/input_widget.dart'; | ||
|  | 
 | ||
|  | class GenericBottomSheet extends StatefulWidget { | ||
|  |   String? countryCode; | ||
|  |   String? initialPhoneNumber; | ||
|  |   final List<Widget> buttons; | ||
|  |   TextEditingController? textController; | ||
|  |   final bool isForEmail; | ||
|  |   Function(Country)? onCountryChange; | ||
|  |   final bool isEnableCountryDropdown; | ||
|  |   final bool isFromSavedLogin; | ||
|  |   Function(String?)? onChange; | ||
|  |   // FocusNode myFocusNode;
 | ||
|  | 
 | ||
|  |   GenericBottomSheet( | ||
|  |       {this.countryCode = "", | ||
|  |       this.initialPhoneNumber = "", | ||
|  |       required this.buttons, | ||
|  |       this.textController, | ||
|  |       this.isForEmail = false, | ||
|  |       this.onCountryChange, | ||
|  |       this.isEnableCountryDropdown = false, | ||
|  |       this.isFromSavedLogin = false, | ||
|  |       this.onChange, | ||
|  |       // required this.myFocusNode
 | ||
|  |       }); | ||
|  | 
 | ||
|  |   @override | ||
|  |   _GenericBottomSheetState createState() => _GenericBottomSheetState(); | ||
|  | } | ||
|  | 
 | ||
|  | class _GenericBottomSheetState extends State<GenericBottomSheet> { | ||
|  |   @override | ||
|  |   void initState() { | ||
|  |     super.initState(); | ||
|  | 
 | ||
|  |     if (!widget.isForEmail) { | ||
|  |       widget.textController = TextEditingController(text: widget.initialPhoneNumber); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   @override | ||
|  |   void dispose() { | ||
|  |     super.dispose(); | ||
|  |   } | ||
|  | 
 | ||
|  |   @override | ||
|  |   Widget build(BuildContext context) { | ||
|  |     return SafeArea( | ||
|  |       top: false, | ||
|  |       bottom: Platform.isIOS ? false : true, | ||
|  |       child: GestureDetector( | ||
|  |         onTap: () { | ||
|  |           FocusScope.of(context).unfocus(); | ||
|  |         }, | ||
|  |         child: Directionality( | ||
|  |           textDirection: Directionality.of(context), | ||
|  |           child: Container( | ||
|  |             padding: const EdgeInsets.all(24), | ||
|  |             decoration: BoxDecoration( | ||
|  |               color: Color(0xFFF8F8FA), | ||
|  |               borderRadius: const BorderRadius.vertical(top: Radius.circular(16)), | ||
|  |             ), | ||
|  |             child: Column( | ||
|  |               mainAxisSize: MainAxisSize.min, | ||
|  |               mainAxisAlignment: MainAxisAlignment.start, | ||
|  |               crossAxisAlignment: CrossAxisAlignment.stretch, | ||
|  |               children: [ | ||
|  |                 // Title
 | ||
|  |                 Row( | ||
|  |                   mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
|  |                   crossAxisAlignment: CrossAxisAlignment.start, | ||
|  |                   children: [ | ||
|  |                     Flexible( | ||
|  |                         child: widget.isFromSavedLogin | ||
|  |                             ? LocaleKeys.receiveOtpToast.tr().toText24() | ||
|  |                             : widget.isForEmail | ||
|  |                                 ? LocaleKeys.enterEmail.tr().toText24() | ||
|  |                                 : LocaleKeys.enterPhoneNumber.tr().toText24()), | ||
|  |                     InkWell( | ||
|  |                         onTap: () { | ||
|  |                           Navigator.of(context).pop(); | ||
|  |                         }, | ||
|  |                         child: Padding( | ||
|  |                           padding: const EdgeInsets.only(top: 10), | ||
|  |                           child: Utils.buildSvgWithAssets( | ||
|  |                             icon: AppAssets.cross_circle, | ||
|  |                           ), | ||
|  |                         )), | ||
|  |                   ], | ||
|  |                 ), | ||
|  |                 const SizedBox(height: 8), | ||
|  |                 // Subtitle
 | ||
|  |                 widget.isFromSavedLogin | ||
|  |                     ? LocaleKeys.pleaseChooseOption.tr().toText16() | ||
|  |                     : widget.isForEmail | ||
|  |                         ? LocaleKeys.enterEmailDesc.tr().toText16() | ||
|  |                         : LocaleKeys.enterPhoneDesc.tr().toText16(), | ||
|  | 
 | ||
|  |                 if (widget.isFromSavedLogin) | ||
|  |                   ...[] | ||
|  |                 else ...[ | ||
|  |                   widget.textController != null | ||
|  |                       ? TextInputWidget( | ||
|  |                           labelText: widget.isForEmail ? LocaleKeys.email : LocaleKeys.phoneNumber, | ||
|  |                           hintText: widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx", | ||
|  |                           controller: widget.textController!, | ||
|  |                           padding: EdgeInsets.only(top: 8, bottom: 8, left: 8, right: 8), | ||
|  |                           keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number, | ||
|  |                           onChange: (value) { | ||
|  |                             widget.textController!.text = value!; | ||
|  |                             if (widget.onChange != null) { | ||
|  |                               widget.onChange!(value); | ||
|  |                             } | ||
|  |                           }, | ||
|  |                           isEnable: true, | ||
|  |                           // focusNode: widget.myFocusNode,
 | ||
|  |                           isReadOnly: widget.isFromSavedLogin, | ||
|  |                           prefix: widget.isForEmail ? null : widget.countryCode, | ||
|  |                           isBorderAllowed: false, | ||
|  |                           isAllowLeadingIcon: true, | ||
|  |                           isCountryDropDown: widget.isEnableCountryDropdown, | ||
|  |                           leadingIcon: widget.isForEmail ? AppAssets.email : AppAssets.smart_phone, | ||
|  |                         ) | ||
|  |                       : SizedBox(), | ||
|  |                 ], | ||
|  | 
 | ||
|  |                 SizedBox(height: 24), | ||
|  |                 ...widget.buttons, | ||
|  |               ], | ||
|  |             ), | ||
|  |           ), | ||
|  |         ), | ||
|  |       ), | ||
|  |     ); | ||
|  |   } | ||
|  | } |