|  |  |  | import 'dart:developer'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import 'package:easy_localization/easy_localization.dart'; | 
					
						
							|  |  |  | import 'package:flutter/gestures.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/size_utils.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/extensions/context_extensions.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/authentication/authentication_view_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/presentation/authentication/register.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/theme/colors.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/bottomsheet/generic_bottom_sheet.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/input_widget.dart'; | 
					
						
							|  |  |  | import 'package:provider/provider.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LoginScreen extends StatefulWidget { | 
					
						
							|  |  |  |   const LoginScreen({super.key}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   _LoginScreen createState() => _LoginScreen(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _LoginScreen extends State<LoginScreen> { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void initState() { | 
					
						
							|  |  |  |     super.initState(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void dispose() { | 
					
						
							|  |  |  |     super.dispose(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     AuthenticationViewModel authVm = context.read<AuthenticationViewModel>(); | 
					
						
							|  |  |  |     return Scaffold( | 
					
						
							|  |  |  |       backgroundColor: AppColors.bgScaffoldColor, | 
					
						
							|  |  |  |       appBar: CustomAppBar( | 
					
						
							|  |  |  |         onBackPressed: () { | 
					
						
							|  |  |  |           Navigator.of(context).pop(); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         onLanguageChanged: (String value) { | 
					
						
							|  |  |  |           // context.setLocale(value == 'en' ? Locale('ar', 'SA') : Locale('en', 'US'));
 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |       body: GestureDetector( | 
					
						
							|  |  |  |         onTap: () { | 
					
						
							|  |  |  |           FocusScope.of(context).unfocus(); // Dismiss the keyboard when tapping outside
 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         child: SingleChildScrollView( | 
					
						
							|  |  |  |           child: Padding( | 
					
						
							|  |  |  |             padding: EdgeInsets.symmetric(horizontal: 24.h), | 
					
						
							|  |  |  |             child: Column( | 
					
						
							|  |  |  |               mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |               crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |               children: [ | 
					
						
							|  |  |  |                 Utils.showLottie(context: context, assetPath: AppAnimations.login, width: 200.h, height: 200.h, repeat: true, fit: BoxFit.cover), | 
					
						
							|  |  |  |                 SizedBox(height: 130.h), // Adjusted to sizer unit
 | 
					
						
							|  |  |  |                 LocaleKeys.welcomeToDrSulaiman.tr().toText32(isBold: true, color: AppColors.textColor), | 
					
						
							|  |  |  |                 SizedBox(height: 32.h), | 
					
						
							|  |  |  |                 TextInputWidget( | 
					
						
							|  |  |  |                   labelText: "${LocaleKeys.nationalId.tr()} / ${LocaleKeys.fileNo.tr()}", | 
					
						
							|  |  |  |                   hintText: "xxxxxxxxx", | 
					
						
							|  |  |  |                   controller: authVm.nationalIdController, | 
					
						
							|  |  |  |                   keyboardType: TextInputType.number, | 
					
						
							|  |  |  |                   isEnable: true, | 
					
						
							|  |  |  |                   prefix: null, | 
					
						
							|  |  |  |                   autoFocus: true, | 
					
						
							|  |  |  |                   isAllowRadius: true, | 
					
						
							|  |  |  |                   isBorderAllowed: false, | 
					
						
							|  |  |  |                   isAllowLeadingIcon: true, | 
					
						
							|  |  |  |                   padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 10.h), | 
					
						
							|  |  |  |                   leadingIcon: AppAssets.student_card, | 
					
						
							|  |  |  |                   errorMessage: "Please enter a valid national ID or file number", | 
					
						
							|  |  |  |                   hasError: true, | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 SizedBox(height: 16.h), // Adjusted to sizer unit (approx 16px)
 | 
					
						
							|  |  |  |                 CustomButton( | 
					
						
							|  |  |  |                   text: LocaleKeys.login.tr(), | 
					
						
							|  |  |  |                   icon: AppAssets.login1, | 
					
						
							|  |  |  |                   iconColor: Colors.white, | 
					
						
							|  |  |  |                   onPressed: () { | 
					
						
							|  |  |  |                     showLoginModelSheet(context: context, phoneNumberController: authVm.phoneNumberController, authViewModel: authVm); | 
					
						
							|  |  |  |                     //   if (nationIdController.text.isNotEmpty) {
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     // } else {
 | 
					
						
							|  |  |  |                     //   showBottomSheet(
 | 
					
						
							|  |  |  |                     //     child: ExceptionBottomSheet(
 | 
					
						
							|  |  |  |                     //       message: TranslationBase.of(context).pleaseEnterNationalIdOrFileNo,
 | 
					
						
							|  |  |  |                     //       showCancel: false,
 | 
					
						
							|  |  |  |                     //       onOkPressed: () {
 | 
					
						
							|  |  |  |                     //         Navigator.of(context).pop();
 | 
					
						
							|  |  |  |                     //       },
 | 
					
						
							|  |  |  |                     //     ),
 | 
					
						
							|  |  |  |                     //   );
 | 
					
						
							|  |  |  |                     // }
 | 
					
						
							|  |  |  |                   }, | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 SizedBox(height: 10.h), // Adjusted to sizer unit (approx 14px)
 | 
					
						
							|  |  |  |                 Center( | 
					
						
							|  |  |  |                   child: RichText( | 
					
						
							|  |  |  |                     textAlign: TextAlign.center, | 
					
						
							|  |  |  |                     text: TextSpan( | 
					
						
							|  |  |  |                       style: context.dynamicTextStyle( | 
					
						
							|  |  |  |                         color: Colors.black, | 
					
						
							|  |  |  |                         fontSize: 14.fSize, // Adjusted to sizer unit
 | 
					
						
							|  |  |  |                         height: 26 / 16, // This height is a ratio, may need re-evaluation
 | 
					
						
							|  |  |  |                         fontWeight: FontWeight.w500, | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                       children: <TextSpan>[ | 
					
						
							|  |  |  |                         TextSpan(text: LocaleKeys.dontHaveAccount.tr(), style: context.dynamicTextStyle()), | 
					
						
							|  |  |  |                         TextSpan(text: "  "), | 
					
						
							|  |  |  |                         TextSpan( | 
					
						
							|  |  |  |                           text: LocaleKeys.registernow.tr(), | 
					
						
							|  |  |  |                           style: context.dynamicTextStyle( | 
					
						
							|  |  |  |                             color: AppColors.primaryRedColor, | 
					
						
							|  |  |  |                             fontSize: 14.fSize, // Adjusted to sizer unit
 | 
					
						
							|  |  |  |                             height: 26 / 16, // Ratio
 | 
					
						
							|  |  |  |                             fontWeight: FontWeight.w500, | 
					
						
							|  |  |  |                           ), | 
					
						
							|  |  |  |                           recognizer: TapGestureRecognizer() | 
					
						
							|  |  |  |                             ..onTap = () { | 
					
						
							|  |  |  |                               Navigator.of(context).push( | 
					
						
							|  |  |  |                                 MaterialPageRoute(builder: (BuildContext context) => RegisterNew()), | 
					
						
							|  |  |  |                               ); | 
					
						
							|  |  |  |                             }, | 
					
						
							|  |  |  |                         ), | 
					
						
							|  |  |  |                       ], | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                   ).withVerticalPadding(2), // Adjusted to sizer unit
 | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               ], | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void showLoginModelSheet({ | 
					
						
							|  |  |  |     required BuildContext context, | 
					
						
							|  |  |  |     required TextEditingController? phoneNumberController, | 
					
						
							|  |  |  |     required AuthenticationViewModel authViewModel, | 
					
						
							|  |  |  |   }) { | 
					
						
							|  |  |  |     context.showBottomSheet( | 
					
						
							|  |  |  |         isScrollControlled: true, | 
					
						
							|  |  |  |         isDismissible: false, | 
					
						
							|  |  |  |         useSafeArea: true, | 
					
						
							|  |  |  |         backgroundColor: AppColors.transparent, | 
					
						
							|  |  |  |         child: StatefulBuilder(builder: (BuildContext context, StateSetter setModalState) { | 
					
						
							|  |  |  |           return Padding( | 
					
						
							|  |  |  |             padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), | 
					
						
							|  |  |  |             child: SingleChildScrollView( | 
					
						
							|  |  |  |               child: GenericBottomSheet( | 
					
						
							|  |  |  |                 countryCode: authVM.selectedCountrySignup.countryCode, | 
					
						
							|  |  |  |                 initialPhoneNumber: "", | 
					
						
							|  |  |  |                 textController: phoneNumberController, | 
					
						
							|  |  |  |                 isEnableCountryDropdown: true, | 
					
						
							|  |  |  |                 onCountryChange: authVM.onCountryChange, | 
					
						
							|  |  |  |                 onChange: authVM.onPhoneNumberChange, | 
					
						
							|  |  |  |                 buttons: [ | 
					
						
							|  |  |  |                   Padding( | 
					
						
							|  |  |  |                     padding: EdgeInsets.only(bottom: 10.h), | 
					
						
							|  |  |  |                     child: CustomButton( | 
					
						
							|  |  |  |                       text: LocaleKeys.sendOTPSMS.tr(), | 
					
						
							|  |  |  |                       onPressed: () async { | 
					
						
							|  |  |  |                         await authViewModel.checkUserAuthentication(otpTypeEnum: OTPTypeEnum.sms); | 
					
						
							|  |  |  |                       }, | 
					
						
							|  |  |  |                       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: () async { | 
					
						
							|  |  |  |                         log("phoneNumberController: ${phoneNumberController == null}"); | 
					
						
							|  |  |  |                         log("phoneNumberControllerVa: ${phoneNumberController?.text}"); | 
					
						
							|  |  |  |                         await authViewModel.checkUserAuthentication(otpTypeEnum: OTPTypeEnum.whatsapp); | 
					
						
							|  |  |  |                       }, | 
					
						
							|  |  |  |                       backgroundColor: Colors.white, | 
					
						
							|  |  |  |                       borderColor: AppColors.borderOnlyColor, | 
					
						
							|  |  |  |                       textColor: AppColors.textColor, | 
					
						
							|  |  |  |                       icon: AppAssets.whatsapp, | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |               ), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |           ); | 
					
						
							|  |  |  |         })); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |