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.
		
		
		
		
		
			
		
			
	
	
		
			290 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Dart
		
	
		
		
			
		
	
	
			290 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Dart
		
	
| 
											2 months ago
										 | import 'package:easy_localization/easy_localization.dart'; | ||
|  | import 'package:flutter/material.dart'; | ||
|  | import 'package:flutter/services.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/string_extensions.dart'; | ||
|  | import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | ||
|  | import 'package:hmg_patient_app_new/presentation/authentication/login.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'; | ||
|  | 
 | ||
|  | class SavedLogin extends StatefulWidget { | ||
|  |   // final SelectDeviceIMEIRES savedLoginData;
 | ||
|  | 
 | ||
|  |   // const SavedLogin(this.savedLoginData, {Key? key}) : super(key: key);
 | ||
|  |   const SavedLogin(); | ||
|  | 
 | ||
|  |   @override | ||
|  |   _SavedLogin createState() => _SavedLogin(); | ||
|  | } | ||
|  | 
 | ||
|  | class _SavedLogin extends State<SavedLogin> { | ||
|  |   LoginTypeEnum loginType = LoginTypeEnum.sms; | ||
|  | 
 | ||
|  |   @override | ||
|  |   void initState() { | ||
|  |     super.initState(); | ||
|  |   } | ||
|  | 
 | ||
|  |   @override | ||
|  |   Widget build(BuildContext context) { | ||
|  |     return Scaffold( | ||
|  |       appBar: CustomAppBar( | ||
|  |         onBackPressed: () {}, | ||
|  |         onLanguageChanged: (lang) {}, | ||
|  |       ), | ||
|  |       body: SafeArea( | ||
|  |         child: Padding( | ||
|  |           padding: EdgeInsets.symmetric(horizontal: 24.h), | ||
|  |           child: Column( | ||
|  |             crossAxisAlignment: CrossAxisAlignment.center, | ||
|  |             children: [ | ||
|  |               const Spacer(flex: 2), | ||
|  |               // Welcome back text
 | ||
|  |               LocaleKeys.welcomeBack.tr().toText16(color: AppColors.inputLabelTextColor), | ||
|  |               SizedBox(height: 16.h), | ||
|  |               ("widget.savedLoginData.name!.toLowerCase().capitalizeFirstofEach").toText26(isBold: true, height: 26 / 36, color: AppColors.textColor), | ||
|  |               SizedBox(height: 24.h), | ||
|  |               Container( | ||
|  |                 padding: EdgeInsets.all(16.h), | ||
|  |                 decoration: BoxDecoration( | ||
|  |                   color: AppColors.whiteColor, | ||
|  |                   border: Border.all(color: AppColors.whiteColor), | ||
|  |                   borderRadius: BorderRadius.circular(24.h), | ||
|  |                   boxShadow: [ | ||
|  |                     BoxShadow(color: Color(0x0D000000), blurRadius: 16, offset: Offset(0, 0), spreadRadius: 5), | ||
|  |                   ], | ||
|  |                 ), | ||
|  |                 child: Column( | ||
|  |                   children: [ | ||
|  |                     // Last login info
 | ||
|  |                     ('LocaleKeys.lastloginBy.tr()' + ' {getType(widget.savedLoginData.logInType!, context)}').toText14(isBold: true, color: AppColors.greyTextColor), | ||
|  |                     ('widget.savedLoginData.createdOn != null ? DateUtil.getFormattedDate(DateUtil.convertStringToDate(widget.savedLoginData.createdOn!), "d MMMM, y at HH:mm") : --') | ||
|  |                         .toText16(isBold: true, color: AppColors.textColor), | ||
|  | 
 | ||
|  |                     Container(margin: EdgeInsets.all(16.h), child: Utils.buildSvgWithAssets(icon: getTypeIcons(loginType.toInt), iconColor: loginType.toInt == 4 ? null : AppColors.primaryRedColor)), | ||
|  |                     // Face ID login button
 | ||
|  |                     Container( | ||
|  |                       height: 45, | ||
|  |                       child: CustomButton( | ||
|  |                         text: "${LocaleKeys.loginBy.tr()} ${loginType.displayName}", | ||
|  |                         onPressed: () { | ||
|  |                           if (loginType == LoginTypeEnum.fingerprint || loginType == LoginTypeEnum.face) { | ||
|  |                             // loginWithFingerPrintFace(loginType.toInt, widget.savedLoginData.iMEI!);
 | ||
|  |                           } else { | ||
|  |                             int? val = loginType.toInt; | ||
|  |                             //checkUserAuthentication(val);
 | ||
|  |                           } | ||
|  |                         }, | ||
|  |                         backgroundColor: Color(0xffED1C2B), | ||
|  |                         borderColor: Color(0xffFEE9EA), | ||
|  |                         textColor: Colors.white, | ||
|  |                         fontSize: 12, | ||
|  |                         fontWeight: FontWeight.w500, | ||
|  |                         borderRadius: 12, | ||
|  |                         padding: EdgeInsets.fromLTRB(0, 10, 0, 10), | ||
|  |                         icon: AppAssets.apple_finder, | ||
|  |                       ), | ||
|  |                     ), | ||
|  |                   ], | ||
|  |                 ), | ||
|  |               ), | ||
|  |               const SizedBox(height: 24), | ||
|  |               Padding( | ||
|  |                 padding: EdgeInsets.symmetric(horizontal: 16.0), | ||
|  |                 child: Text( | ||
|  |                   LocaleKeys.oR.tr(), | ||
|  |                   style: context.dynamicTextStyle(fontSize: 16, fontWeight: FontWeight.w500), | ||
|  |                 ), | ||
|  |               ), | ||
|  |               const SizedBox(height: 24), | ||
|  |               // OTP login button
 | ||
|  |               loginType != null && loginType.toInt != 1 | ||
|  |                   ? Column( | ||
|  |                       children: [ | ||
|  |                         loginType.toInt != 1 | ||
|  |                             ? CustomButton( | ||
|  |                                 text: LocaleKeys.loginByOTP.tr(), | ||
|  |                                 onPressed: () { | ||
|  |                                   showModalBottomSheet( | ||
|  |                                     context: context, | ||
|  |                                     isScrollControlled: true, | ||
|  |                                     isDismissible: false, | ||
|  |                                     useSafeArea: true, | ||
|  |                                     backgroundColor: Colors.transparent, | ||
|  |                                     enableDrag: false, | ||
|  |                                     // Prevent dragging to avoid focus conflicts
 | ||
|  |                                     builder: (bottomSheetContext) => StatefulBuilder(builder: (BuildContext context, StateSetter setModalState) { | ||
|  |                                       return Padding( | ||
|  |                                         padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), | ||
|  |                                         child: SingleChildScrollView( | ||
|  |                                           child: GenericBottomSheet( | ||
|  |                                             countryCode: "966", | ||
|  |                                             initialPhoneNumber: "", | ||
|  |                                             textController: TextEditingController(), | ||
|  |                                             isFromSavedLogin: true, | ||
|  |                                             isEnableCountryDropdown: true, | ||
|  |                                             onCountryChange: (value) {}, | ||
|  |                                             onChange: (String? value) {}, | ||
|  |                                             buttons: [ | ||
|  |                                               Padding( | ||
|  |                                                 padding: EdgeInsets.only(bottom: 10.h), | ||
|  |                                                 child: CustomButton( | ||
|  |                                                   text: LocaleKeys.sendOTPSMS.tr(), | ||
|  |                                                   onPressed: () { | ||
|  |                                                     Navigator.of(context).pop(); | ||
|  |                                                     loginType = LoginTypeEnum.sms; | ||
|  |                                                     int? val = loginType.toInt; | ||
|  |                                                     // checkUserAuthentication(val);
 | ||
|  |                                                   }, | ||
|  |                                                   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: const EdgeInsets.only(bottom: 10, top: 10), | ||
|  |                                                 child: CustomButton( | ||
|  |                                                   text: LocaleKeys.sendOTPWHATSAPP.tr(), | ||
|  |                                                   onPressed: () { | ||
|  |                                                     Navigator.of(context).pop(); | ||
|  |                                                     loginType = LoginTypeEnum.whatsapp; | ||
|  |                                                     int? val = loginType.toInt; | ||
|  |                                                     // checkUserAuthentication(val);
 | ||
|  |                                                   }, | ||
|  |                                                   backgroundColor: AppColors.transparent, | ||
|  |                                                   borderColor: AppColors.textColor, | ||
|  |                                                   textColor: AppColors.textColor, | ||
|  |                                                   icon: AppAssets.whatsapp, | ||
|  |                                                 ), | ||
|  |                                               ), | ||
|  |                                             ], | ||
|  |                                           ), | ||
|  |                                         ), | ||
|  |                                       ); | ||
|  |                                     }), | ||
|  |                                   ); | ||
|  |                                 }, | ||
|  |                                 backgroundColor: AppColors.whiteColor, | ||
|  |                                 borderColor: AppColors.borderOnlyColor, | ||
|  |                                 textColor: AppColors.textColor, | ||
|  |                                 borderWidth: 2, | ||
|  |                                 padding: EdgeInsets.fromLTRB(0, 14, 0, 14), | ||
|  |                                 icon: AppAssets.password_validation, | ||
|  |                               ) | ||
|  |                             : Container(), | ||
|  |                         SizedBox( | ||
|  |                           height: 20, | ||
|  |                         ), | ||
|  |                       ], | ||
|  |                     ) | ||
|  |                   : CustomButton( | ||
|  |                       text: "${LocaleKeys.loginBy.tr()} ${LoginTypeEnum.whatsapp.displayName}", | ||
|  |                       onPressed: () { | ||
|  |                         if (loginType == LoginTypeEnum.fingerprint || loginType == LoginTypeEnum.face) { | ||
|  |                           // loginWithFingerPrintFace(loginType.toInt, "iMEI");
 | ||
|  |                         } else { | ||
|  |                           loginType = LoginTypeEnum.whatsapp; | ||
|  |                           int? val = loginType.toInt; | ||
|  |                           // checkUserAuthentication(val);
 | ||
|  |                         } | ||
|  |                       }, | ||
|  |                       backgroundColor: AppColors.whiteColor, | ||
|  |                       borderColor: Color(0xFF2E3039), | ||
|  |                       textColor: Color(0xFF2E3039), | ||
|  |                       borderWidth: 2, | ||
|  |                       padding: EdgeInsets.fromLTRB(0, 14, 0, 14), | ||
|  |                       icon: AppAssets.whatsapp, | ||
|  |                     ), | ||
|  |               const Spacer(flex: 2), | ||
|  |               // OR divider
 | ||
|  | 
 | ||
|  |               const SizedBox(height: 24), | ||
|  |               // Guest and Switch account
 | ||
|  |               Row( | ||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
|  |                 children: [ | ||
|  |                   Expanded( | ||
|  |                     child: Container( | ||
|  |                       height: 56, | ||
|  |                       child: CustomButton( | ||
|  |                         text: LocaleKeys.guest.tr(), | ||
|  |                         onPressed: () { | ||
|  |                           Navigator.of(context).pushReplacement( | ||
|  |                             MaterialPageRoute(builder: (BuildContext context) => LoginScreen()), | ||
|  |                           ); | ||
|  |                         }, | ||
|  |                         backgroundColor: Color(0xffFEE9EA), | ||
|  |                         borderColor: Color(0xffFEE9EA), | ||
|  |                         textColor: Color(0xffED1C2B), | ||
|  |                         fontSize: 16, | ||
|  |                         fontWeight: FontWeight.w500, | ||
|  |                         borderRadius: 12, | ||
|  |                         padding: EdgeInsets.fromLTRB(0, 10, 0, 10), | ||
|  |                         // icon: "assets/images/svg/apple-finder.svg",
 | ||
|  |                       ), | ||
|  |                     ), | ||
|  |                   ), | ||
|  |                   SizedBox( | ||
|  |                     width: MediaQuery.of(context).size.width * 0.05, | ||
|  |                   ), | ||
|  |                   Expanded( | ||
|  |                     child: Container( | ||
|  |                       height: 56, | ||
|  |                       child: CustomButton( | ||
|  |                         text: LocaleKeys.switchAccount.tr(), | ||
|  |                         onPressed: () { | ||
|  |                           Navigator.of(context).pushReplacement( | ||
|  |                             MaterialPageRoute(builder: (BuildContext context) => LoginScreen()), | ||
|  |                           ); | ||
|  |                         }, | ||
|  |                         backgroundColor: Color(0xffFEE9EA), | ||
|  |                         borderColor: Color(0xffFEE9EA), | ||
|  |                         textColor: Color(0xffED1C2B), | ||
|  |                         fontSize: 15, | ||
|  |                         fontWeight: FontWeight.w500, | ||
|  |                         borderRadius: 12, | ||
|  |                         padding: EdgeInsets.fromLTRB(0, 10, 0, 10), | ||
|  |                         // icon: "assets/images/svg/apple-finder.svg",
 | ||
|  |                       ), | ||
|  |                     ), | ||
|  |                   ), | ||
|  |                 ], | ||
|  |               ), | ||
|  |               const SizedBox(height: 20), | ||
|  |             ], | ||
|  |           ), | ||
|  |         ), | ||
|  |       ), | ||
|  |     ); | ||
|  |   } | ||
|  | 
 | ||
|  |   String getTypeIcons(int type) { | ||
|  |     final types = { | ||
|  |       1: AppAssets.sms, | ||
|  |       2: AppAssets.fingerprint, | ||
|  |       3: AppAssets.fingerprint, | ||
|  |       4: AppAssets.whatsapp, | ||
|  |     }; | ||
|  | 
 | ||
|  |     if (types.containsKey(type)) { | ||
|  |       return types[type]!; | ||
|  |     } else { | ||
|  |       throw Exception('Invalid login type: $type'); | ||
|  |     } | ||
|  |   } | ||
|  | } |