login flow added.
							parent
							
								
									b5c9b83fdd
								
							
						
					
					
						commit
						6b9ea200ad
					
				| @ -0,0 +1,40 @@ | ||||
| { | ||||
|   "project_info": { | ||||
|     "project_number": "679409052782", | ||||
|     "firebase_url": "https://mohemm-dce93.firebaseio.com", | ||||
|     "project_id": "mohemm-dce93", | ||||
|     "storage_bucket": "mohemm-dce93.appspot.com" | ||||
|   }, | ||||
|   "client": [ | ||||
|     { | ||||
|       "client_info": { | ||||
|         "mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f", | ||||
|         "android_client_info": { | ||||
|           "package_name": "hmg.cloudSolutions.mohem" | ||||
|         } | ||||
|       }, | ||||
|       "oauth_client": [ | ||||
|         { | ||||
|           "client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com", | ||||
|           "client_type": 3 | ||||
|         } | ||||
|       ], | ||||
|       "api_key": [ | ||||
|         { | ||||
|           "current_key": "AIzaSyDgWjuSBIKGghWxYg_KGBRIZTi-O_UA8mU" | ||||
|         } | ||||
|       ], | ||||
|       "services": { | ||||
|         "appinvite_service": { | ||||
|           "other_platform_oauth_client": [ | ||||
|             { | ||||
|               "client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com", | ||||
|               "client_type": 3 | ||||
|             } | ||||
|           ] | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "configuration_version": "1" | ||||
| } | ||||
| @ -1,6 +1,17 @@ | ||||
| package com.mohem_flutter_app | ||||
| 
 | ||||
| import io.flutter.embedding.android.FlutterActivity | ||||
| //import io.flutter.embedding.android.FlutterActivity | ||||
| // | ||||
| //class MainActivity: FlutterActivity() { | ||||
| //} | ||||
| 
 | ||||
| class MainActivity: FlutterActivity() { | ||||
| } | ||||
| 
 | ||||
| import io.flutter.embedding.android.FlutterFragmentActivity | ||||
| import io.flutter.embedding.engine.FlutterEngine | ||||
| import io.flutter.plugins.GeneratedPluginRegistrant | ||||
| 
 | ||||
| class MainActivity: FlutterFragmentActivity() { | ||||
|     override fun configureFlutterEngine(flutterEngine: FlutterEngine) { | ||||
|         GeneratedPluginRegistrant.registerWith(flutterEngine) | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,64 @@ | ||||
| class GetMobileLoginInfoListModel { | ||||
|   int? iD; | ||||
|   int? employeeID; | ||||
|   int? channelID; | ||||
|   int? companyID; | ||||
|   String? deviceType; | ||||
|   String? deviceToken; | ||||
|   int? language; | ||||
|   int? gender; | ||||
|   int? loginType; | ||||
|   String? createdOn; | ||||
|   String? editedOn; | ||||
|   String? employeeName; | ||||
|   bool? businessCardPrivilege; | ||||
| 
 | ||||
|   GetMobileLoginInfoListModel( | ||||
|       {this.iD, | ||||
|       this.employeeID, | ||||
|       this.channelID, | ||||
|       this.companyID, | ||||
|       this.deviceType, | ||||
|       this.deviceToken, | ||||
|       this.language, | ||||
|       this.gender, | ||||
|       this.loginType, | ||||
|       this.createdOn, | ||||
|       this.editedOn, | ||||
|       this.employeeName, | ||||
|       this.businessCardPrivilege}); | ||||
| 
 | ||||
|   GetMobileLoginInfoListModel.fromJson(Map<String, dynamic> json) { | ||||
|     iD = json['ID']; | ||||
|     employeeID = json['EmployeeID']; | ||||
|     channelID = json['ChannelID']; | ||||
|     companyID = json['CompanyID']; | ||||
|     deviceType = json['DeviceType']; | ||||
|     deviceToken = json['DeviceToken']; | ||||
|     language = json['Language']; | ||||
|     gender = json['Gender']; | ||||
|     loginType = json['LoginType']; | ||||
|     createdOn = json['CreatedOn']; | ||||
|     editedOn = json['EditedOn']; | ||||
|     employeeName = json['EmployeeName']; | ||||
|     businessCardPrivilege = json['BusinessCardPrivilege']; | ||||
|   } | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() { | ||||
|     final Map<String, dynamic> data = Map<String, dynamic>(); | ||||
|     data['ID'] = iD; | ||||
|     data['EmployeeID'] = employeeID; | ||||
|     data['ChannelID'] = channelID; | ||||
|     data['CompanyID'] = companyID; | ||||
|     data['DeviceType'] = deviceType; | ||||
|     data['DeviceToken'] = deviceToken; | ||||
|     data['Language'] = language; | ||||
|     data['Gender'] = gender; | ||||
|     data['LoginType'] = loginType; | ||||
|     data['CreatedOn'] = createdOn; | ||||
|     data['EditedOn'] = editedOn; | ||||
|     data['EmployeeName'] = employeeName; | ||||
|     data['BusinessCardPrivilege'] = businessCardPrivilege; | ||||
|     return data; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,750 @@ | ||||
| import 'package:easy_localization/src/public_ext.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:flutter_svg/svg.dart'; | ||||
| import 'package:local_auth/auth_strings.dart'; | ||||
| import 'package:local_auth/local_auth.dart'; | ||||
| import 'package:mohem_flutter_app/api/login_api_client.dart'; | ||||
| import 'package:mohem_flutter_app/app_state/app_state.dart'; | ||||
| import 'package:mohem_flutter_app/classes/colors.dart'; | ||||
| import 'package:mohem_flutter_app/classes/utils.dart'; | ||||
| import 'package:mohem_flutter_app/config/routes.dart'; | ||||
| import 'package:mohem_flutter_app/dialogs/otp_dialog.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/int_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/string_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; | ||||
| import 'package:mohem_flutter_app/models/basic_member_information_model.dart'; | ||||
| import 'package:mohem_flutter_app/models/generic_response_model.dart'; | ||||
| import 'package:mohem_flutter_app/widgets/button/default_button.dart'; | ||||
| 
 | ||||
| class VerifyLastLoginScreen extends StatefulWidget { | ||||
|   VerifyLastLoginScreen({Key? key}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   _VerifyLastLoginScreenState createState() { | ||||
|     return _VerifyLastLoginScreenState(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> { | ||||
|   final LocalAuthentication auth = LocalAuthentication(); | ||||
|   List<BiometricType> _availableBioMetricType = []; | ||||
| 
 | ||||
|   @override | ||||
|   void initState() { | ||||
|     _getAvailableBiometrics(); | ||||
|     // setDefault(); | ||||
|     super.initState(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     String empName = AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr! : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!; | ||||
|     return Scaffold( | ||||
|       appBar: AppBar( | ||||
|         backgroundColor: Colors.transparent, | ||||
|         leading: IconButton( | ||||
|           icon: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor), | ||||
|           onPressed: () => Navigator.pop(context), | ||||
|         ), | ||||
|         actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width], | ||||
|       ), | ||||
|       body: Column( | ||||
|         children: [ | ||||
|           Expanded( | ||||
|             child: ListView( | ||||
|               padding: const EdgeInsets.all(21), | ||||
|               physics: const BouncingScrollPhysics(), | ||||
|               children: [ | ||||
|                 //12.height, | ||||
|                 if (true) | ||||
|                   Column( | ||||
|                     mainAxisSize: MainAxisSize.min, | ||||
|                     crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                     children: [ | ||||
|                       LocaleKeys.welcomeBack.tr().toText12(), | ||||
|                       empName.toText24(isBold: true), | ||||
|                       10.height, | ||||
|                       LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(), | ||||
|                       Container( | ||||
|                         height: 72, | ||||
|                         margin: const EdgeInsets.only(top: 23, bottom: 23), | ||||
|                         alignment: Alignment.center, | ||||
|                         padding: const EdgeInsets.only(left: 17, right: 12), | ||||
|                         decoration: BoxDecoration( | ||||
|                           borderRadius: BorderRadius.circular(10), | ||||
|                           color: Colors.white, | ||||
|                           border: Border.all( | ||||
|                             color: const Color(0xffefefef), | ||||
|                             width: 1, | ||||
|                           ), | ||||
|                         ), | ||||
|                         child: Column( | ||||
|                           mainAxisSize: MainAxisSize.min, | ||||
|                           children: [ | ||||
|                             Row( | ||||
|                               mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||
|                               crossAxisAlignment: CrossAxisAlignment.center, | ||||
|                               children: [ | ||||
|                                 LocaleKeys.lastLoginDetails.tr().toText16(), | ||||
|                                 // Text( | ||||
|                                 //   user.editedOn != null | ||||
|                                 //       ? DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(user.editedOn)) | ||||
|                                 //       : user.createdOn != null | ||||
|                                 //           ? DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(user.createdOn)) | ||||
|                                 //           : '--', | ||||
|                                 //   style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48), | ||||
|                                 // ), | ||||
|                               ], | ||||
|                             ), | ||||
|                             Row( | ||||
|                               mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||
|                               crossAxisAlignment: CrossAxisAlignment.center, | ||||
|                               children: [ | ||||
|                                 LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color), | ||||
|                                 Text( | ||||
|                                   "SMS", | ||||
|                                   // " " + getType(user.logInType, context), | ||||
|                                   style: TextStyle( | ||||
|                                     fontSize: 12, | ||||
|                                     fontWeight: FontWeight.w600, | ||||
|                                     color: Color(0xff2B353E), | ||||
|                                   ), | ||||
|                                 ), | ||||
|                                 Expanded(child: SizedBox()), | ||||
|                                 // Text( | ||||
|                                 //   user.editedOn != null | ||||
|                                 //       ? DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(user.editedOn), false) | ||||
|                                 //       : user.createdOn != null | ||||
|                                 //           ? DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(user.createdOn), false) | ||||
|                                 //           : '--', | ||||
|                                 //   style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff575757), letterSpacing: -0.48), | ||||
|                                 // ), | ||||
|                               ], | ||||
|                             ) | ||||
|                           ], | ||||
|                         ), | ||||
|                       ), | ||||
|                       LocaleKeys.pleaseVerify.tr().toText16(), | ||||
|                       GridView( | ||||
|                         gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9), | ||||
|                         physics: const NeverScrollableScrollPhysics(), | ||||
|                         padding: const EdgeInsets.only(top: 9), | ||||
|                         shrinkWrap: true, | ||||
|                         children: [ | ||||
|                           getButton(3), | ||||
|                           getButton(2), | ||||
|                           getButton(1), | ||||
|                           getButton(4), | ||||
|                         ], | ||||
|                       ) | ||||
|                     ], | ||||
|                   ) | ||||
|                 // else | ||||
|                 //   Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ | ||||
|                 //     Image.asset( | ||||
|                 //       'assets/images/habib-logo.png', | ||||
|                 //       height: 90, | ||||
|                 //       width: 90, | ||||
|                 //     ), | ||||
|                 //     SizedBox(height: 23), | ||||
|                 //     this.onlySMSBox == false | ||||
|                 //         ? Text( | ||||
|                 //             TranslationBase.of(context).verifyLoginWith, | ||||
|                 //             style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16), | ||||
|                 //           ) | ||||
|                 //         : Text( | ||||
|                 //             TranslationBase.of(context).verifyFingerprint2, | ||||
|                 //             style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16), | ||||
|                 //           ), | ||||
|                 //     SizedBox(height: 23), | ||||
|                 //     Text( | ||||
|                 //       TranslationBase.of(context).pleaseVerify, | ||||
|                 //       style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64), | ||||
|                 //     ), | ||||
|                 //     GridView( | ||||
|                 //       gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9), | ||||
|                 //       physics: NeverScrollableScrollPhysics(), | ||||
|                 //       padding: EdgeInsets.only(top: 9), | ||||
|                 //       shrinkWrap: true, | ||||
|                 //       children: [ | ||||
|                 //         if (onlySMSBox == false) getButton(3), | ||||
|                 //         if (onlySMSBox == false) getButton(2), | ||||
|                 //         getButton(1), | ||||
|                 //         getButton(4), | ||||
|                 //       ], | ||||
|                 //     ), | ||||
|                 //   ]), | ||||
|               ], | ||||
|             ), | ||||
|           ), | ||||
|           12.height, | ||||
|           DefaultButton( | ||||
|             LocaleKeys.useAnotherAccount.tr(), | ||||
|             () => { | ||||
|               //Navigator.of(context).pushNamed(LOGIN_TYPE) | ||||
|             }, | ||||
|           ).insideContainer, | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Future<void> _getAvailableBiometrics() async { | ||||
|     try { | ||||
|       _availableBioMetricType = await auth.getAvailableBiometrics(); | ||||
|     } on PlatformException catch (e) { | ||||
|       // AppToast.showErrorToast(message: e.message); | ||||
|       print(e); | ||||
|     } | ||||
|     if (mounted) setState(() {}); | ||||
|   } | ||||
| 
 | ||||
|   // authenticateUser(int type, {int isActive}) { | ||||
|   //   GifLoaderDialogUtils.showMyDialog(context); | ||||
|   //   if (type == 2 || type == 3) { | ||||
|   //     fingrePrintBefore = type; | ||||
|   //   } | ||||
|   //   this.selectedOption = fingrePrintBefore != null ? fingrePrintBefore : type; | ||||
|   // | ||||
|   //   switch (type) { | ||||
|   //     case 1: | ||||
|   //       this.loginWithSMS(type); | ||||
|   //       break; | ||||
|   //     case 2: | ||||
|   //       this.loginWithFingurePrintFace(type, isActive); | ||||
|   //       break; | ||||
|   //     case 3: | ||||
|   //       this.loginWithFingurePrintFace(type, isActive); | ||||
|   //       break; | ||||
|   //     case 4: | ||||
|   //       this.loginWithSMS(type); | ||||
|   //       break; | ||||
|   //     default: | ||||
|   //       break; | ||||
|   //   } | ||||
|   //   sharedPref.setInt(LAST_LOGIN, this.selectedOption); //this.cs.sharedService.setStorage(this.selectedOption, AuthenticationService.LAST_LOGIN); | ||||
|   // } | ||||
| // | ||||
| //   loginWithSMS(type) { | ||||
| //     //if (!el.disabled) { | ||||
| //     if (this.user != null && this.registerd_data == null) { | ||||
| //       this.checkUserAuthentication(type); | ||||
| //     } else { | ||||
| //       if (this.loginTokenID != null) { | ||||
| //         // Future.delayed(Duration(seconds: 1), () { | ||||
| //         this.sendActivationCode(type); | ||||
| //         //  }); | ||||
| //       } else { | ||||
| //         this.checkUserAuthentication(type); | ||||
| //       } | ||||
| //     } | ||||
| //   } | ||||
| // | ||||
| //   checkUserAuthentication(type) { | ||||
| //     showLoader(true); | ||||
| //     var req = getCommonRequest(type: type); | ||||
| //     req.logInTokenID = ""; | ||||
| // | ||||
| //     var request = CheckPatientAuthenticationReq.fromJson(req.toJson()); | ||||
| // | ||||
| //     sharedPref.setObject(REGISTER_DATA_FOR_REGISTER, request); | ||||
| //     authService | ||||
| //         .checkPatientAuthentication(request) | ||||
| //         .then((value) => { | ||||
| //               GifLoaderDialogUtils.hideDialog(context), | ||||
| //               if (value['isSMSSent']) | ||||
| //                 { | ||||
| //                   sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']), | ||||
| //                   this.loginTokenID = value['LogInTokenID'], | ||||
| //                   sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request), | ||||
| //                   // Future.delayed(Duration(seconds: 1), () { | ||||
| //                   this.sendActivationCode(type) | ||||
| //                   //  }) | ||||
| //                 } | ||||
| //               else | ||||
| //                 { | ||||
| //                   if (value['IsAuthenticated']) {this.checkActivationCode()} | ||||
| //                 } | ||||
| //             }) | ||||
| //         .catchError((err) { | ||||
| //       print(err); | ||||
| //       GifLoaderDialogUtils.hideDialog(context); | ||||
| //     }); | ||||
| //   } | ||||
| // | ||||
| //   sendActivationCode(type) async { | ||||
| //     var request = this.getCommonRequest(type: type); | ||||
| //     request.sMSSignature = await SMSOTP.getSignature(); | ||||
| //     GifLoaderDialogUtils.showMyDialog(context); | ||||
| //     if (healthId != null) { | ||||
| //       // final DateFormat dateFormat = DateFormat('MM/dd/yyyy'); | ||||
| //       // final DateFormat dateFormat2 = DateFormat('dd/MM/yyyy'); | ||||
| //       request.dob = dob; //isHijri == 1 ? dob : dateFormat2.format(dateFormat.parse(dob)); | ||||
| //       request.healthId = healthId; | ||||
| //       request.isHijri = isHijri; | ||||
| //       await this.authService.sendActivationCodeRegister(request).then((result) { | ||||
| //         GifLoaderDialogUtils.hideDialog(context); | ||||
| //         if (result != null && result['isSMSSent'] == true) { | ||||
| //           this.startSMSService(type); | ||||
| //         } | ||||
| //       }).catchError((r) { | ||||
| //         GifLoaderDialogUtils.hideDialog(context); | ||||
| //       }); | ||||
| //     } else { | ||||
| //       request.dob = ""; | ||||
| //       request.healthId = ""; | ||||
| //       request.isHijri = 0; | ||||
| //       await this.authService.sendActivationCode(request).then((result) { | ||||
| //         GifLoaderDialogUtils.hideDialog(context); | ||||
| //         if (result != null && result['isSMSSent'] == true) { | ||||
| //           this.startSMSService(type); | ||||
| //         } | ||||
| //       }).catchError((r) { | ||||
| //         GifLoaderDialogUtils.hideDialog(context); | ||||
| //       }); | ||||
| //     } | ||||
| //   } | ||||
| // | ||||
| //   var tempType; | ||||
| // | ||||
| //   startSMSService(type) { | ||||
| //     tempType = type; | ||||
| //     new SMSOTP( | ||||
| //       context, | ||||
| //       type, | ||||
| //       this.mobileNumber, | ||||
| //       (value) { | ||||
| //         this.checkActivationCode(value: value); | ||||
| //       }, | ||||
| //       () => { | ||||
| //         Navigator.pop(context), | ||||
| //       }, | ||||
| //     ).displayDialog(context); | ||||
| //   } | ||||
| // | ||||
| //   loginWithFingurePrintFace(type, int isActive) async { | ||||
| //     if (isActive == 1 || isActive == 0) { | ||||
| //       const iosStrings = | ||||
| //           const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please reenable your Touch ID'); | ||||
| // | ||||
| //       try { | ||||
| //         authenticated = await auth.authenticateWithBiometrics(localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true, iOSAuthStrings: iosStrings); | ||||
| //       } on PlatformException catch (e) { | ||||
| //         GifLoaderDialogUtils.hideDialog(context); | ||||
| //         AppToast.showErrorToast(message: 'Please enable your Touch or Face ID'); | ||||
| //       } | ||||
| // | ||||
| //       if (authenticated == true) { | ||||
| //         // if (user != null && (user.logInType == 2 || user.logInType == 3)) { | ||||
| //         //   this.checkActivationCode(); | ||||
| //         // } else { | ||||
| // | ||||
| //         var request = this.getCommonRequest(type: type); | ||||
| //         this.getMobileInfo(request); | ||||
| //         //} | ||||
| //       } | ||||
| //     } | ||||
| //   } | ||||
| // | ||||
| //   getMobileInfo(request) { | ||||
| //     // GifLoaderDialogUtils.showMyDialog(context); | ||||
| //     this.authService.getLoginInfo(request).then((result) { | ||||
| //       GifLoaderDialogUtils.hideDialog(context); | ||||
| //       if (result['SMSLoginRequired'] == false) { | ||||
| //         this.loginTokenID = result['LogInTokenID']; | ||||
| //         this.patientOutSA = result['PatientOutSA']; | ||||
| //         // sms for register the biometric | ||||
| //         if (result['isSMSSent']) { | ||||
| //           setState(() { | ||||
| //             isMoreOption = true; | ||||
| //             this.onlySMSBox = true; | ||||
| //             // this.fingrePrintBefore = true; | ||||
| //           }); | ||||
| //           //this.button(); | ||||
| //         } else { | ||||
| //           setDefault(); | ||||
| //           checkActivationCode(); | ||||
| //         } | ||||
| //       } else { | ||||
| //         if (result['IsAuthenticated'] == true) { | ||||
| //           setState(() { | ||||
| //             isMoreOption = true; | ||||
| //             this.onlySMSBox = true; | ||||
| //             // this.fingrePrintBefore = true; | ||||
| //           }); | ||||
| //         } | ||||
| //       } | ||||
| //     }).catchError((err) { | ||||
| //       GifLoaderDialogUtils.hideDialog(context); | ||||
| //       print(err); | ||||
| //     }); | ||||
| //   } | ||||
| // | ||||
| //   setDefault() async { | ||||
| //     if (await sharedPref.getObject(IMEI_USER_DATA) != null) user = SelectDeviceIMEIRES.fromJson(await sharedPref.getObject(IMEI_USER_DATA)); | ||||
| // | ||||
| //     if (await sharedPref.getObject(REGISTER_DATA_FOR_LOGIIN) != null) { | ||||
| //       isMoreOption = true; | ||||
| //       this.registerd_data = CheckPatientAuthenticationReq.fromJson(await sharedPref.getObject(REGISTER_DATA_FOR_LOGIIN)); | ||||
| //     } | ||||
| // | ||||
| //     this.mobileNumber = this.registerd_data != null ? this.registerd_data.patientMobileNumber : int.parse(this.user.mobile); | ||||
| //     this.zipCode = this.registerd_data != null | ||||
| //         ? this.registerd_data.zipCode | ||||
| //         : this.user.outSA == true | ||||
| //             ? "971" | ||||
| //             : "966"; | ||||
| //     this.patientOutSA = this.registerd_data != null | ||||
| //         ? this.registerd_data.zipCode == "966" | ||||
| //             ? 0 | ||||
| //             : 1 | ||||
| //         : this.user.outSA; | ||||
| //     if (this.registerd_data != null) { | ||||
| //       this.loginTokenID = await sharedPref.getString(LOGIN_TOKEN_ID); | ||||
| //       this.loginType = this.registerd_data.searchType; | ||||
| //     } | ||||
| //     var nhic = await sharedPref.getObject(NHIC_DATA); | ||||
| //     if (nhic != null) { | ||||
| //       final DateFormat dateFormat = DateFormat('MM/dd/yyyy'); | ||||
| //       final DateFormat dateFormat2 = DateFormat('dd/MM/yyyy'); | ||||
| //       dob = nhic['IsHijri'] ? nhic['DateOfBirth'] : dateFormat2.format(dateFormat.parse(nhic['DateOfBirth'])); | ||||
| // | ||||
| //       isHijri = nhic['IsHijri'] ? 1 : 0; | ||||
| //       healthId = nhic['HealthId']; | ||||
| //     } | ||||
| //     this.deviceToken = await sharedPref.getString(PUSH_TOKEN); | ||||
| //     this.lastLogin = await sharedPref.getInt(LAST_LOGIN) != null | ||||
| //         ? await sharedPref.getInt(LAST_LOGIN) | ||||
| //         : user != null | ||||
| //             ? user.logInType | ||||
| //             : null; | ||||
| // | ||||
| //     //this.cs.sharedService.getStorage(AuthenticationService.LAST_LOGIN); | ||||
| //   } | ||||
| // | ||||
| //   getCommonRequest({type}) { | ||||
| //     var request = SendActivationRequest(); | ||||
| //     request.patientMobileNumber = this.mobileNumber; | ||||
| //     request.mobileNo = '0' + this.mobileNumber.toString(); | ||||
| //     request.deviceToken = this.deviceToken; | ||||
| //     request.projectOutSA = this.patientOutSA == true ? true : false; | ||||
| //     request.loginType = this.selectedOption; | ||||
| //     request.oTPSendType = type == 1 ? type : 2; //this.selectedOption == 1 ? 1 : 2; | ||||
| //     request.zipCode = this.zipCode; | ||||
| // | ||||
| //     request.logInTokenID = this.loginTokenID ?? ""; | ||||
| // | ||||
| //     if (this.registerd_data != null) { | ||||
| //       request.searchType = this.registerd_data.searchType != null ? this.registerd_data.searchType : 1; | ||||
| //       request.patientID = this.registerd_data.patientID != null ? this.registerd_data.patientID : 0; | ||||
| //       request.patientIdentificationID = request.nationalID = this.registerd_data.patientIdentificationID != null ? this.registerd_data.patientIdentificationID : '0'; | ||||
| // | ||||
| //       request.isRegister = this.registerd_data.isRegister; | ||||
| //     } else { | ||||
| //       request.searchType = request.searchType != null ? request.searchType : 2; | ||||
| //       request.patientID = this.user.patientID != null ? this.user.patientID : 0; | ||||
| //       request.nationalID = request.nationalID != null ? request.nationalID : '0'; | ||||
| //       request.patientIdentificationID = request.patientIdentificationID != null ? request.patientIdentificationID : '0'; | ||||
| //       request.isRegister = false; | ||||
| //     } | ||||
| //     request.deviceTypeID = request.searchType; | ||||
| //     return request; | ||||
| //   } | ||||
| // | ||||
| //   // checkActivationCode({value}) async { | ||||
| //   //   // Navigator.pop(context); | ||||
| //   //   GifLoaderDialogUtils.showMyDialog(context); | ||||
| //   //   var request = this.getCommonRequest().toJson(); | ||||
| //   //   dynamic res; | ||||
| //   //   if (healthId != null) { | ||||
| //   //     request['DOB'] = dob; | ||||
| //   //     request['HealthId'] = healthId; | ||||
| //   //     request['IsHijri'] = isHijri; | ||||
| //   // | ||||
| //   //     authService | ||||
| //   //         .checkActivationCodeRegister(request, value) | ||||
| //   //         .then((result) => { | ||||
| //   //       res = result, | ||||
| //   //       if (result is Map) | ||||
| //   //         { | ||||
| //   //           result = CheckActivationCode.fromJson(result), | ||||
| //   //           if (this.registerd_data != null && this.registerd_data.isRegister == true) | ||||
| //   //             { | ||||
| //   //               widget.changePageViewIndex(1), | ||||
| //   //               Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)), | ||||
| //   //             } | ||||
| //   //         } | ||||
| //   //       else | ||||
| //   //         { | ||||
| //   //           // Navigator.of(context).pop(), | ||||
| //   //           GifLoaderDialogUtils.hideDialog(context), | ||||
| //   //           Future.delayed(Duration(seconds: 1), () { | ||||
| //   //             AppToast.showErrorToast(message: result); | ||||
| //   //           }), | ||||
| //   //         } | ||||
| //   //     }) | ||||
| //   //         .catchError((err) { | ||||
| //   //       print(err); | ||||
| //   //       GifLoaderDialogUtils.hideDialog(context); | ||||
| //   //       Future.delayed(Duration(seconds: 1), () { | ||||
| //   //         AppToast.showErrorToast(message: err); | ||||
| //   //         startSMSService(tempType); | ||||
| //   //       }); | ||||
| //   //     }); | ||||
| //   //   } else { | ||||
| //   //     authService | ||||
| //   //         .checkActivationCode(request, value) | ||||
| //   //         .then((result) => { | ||||
| //   //       res = result, | ||||
| //   //       if (result is Map) | ||||
| //   //         { | ||||
| //   //           result = CheckActivationCode.fromJson(result), | ||||
| //   //           if (this.registerd_data != null && this.registerd_data.isRegister == true) | ||||
| //   //             { | ||||
| //   //               widget.changePageViewIndex(1), | ||||
| //   //               Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)), | ||||
| //   //             } | ||||
| //   //           else | ||||
| //   //             { | ||||
| //   //               sharedPref.remove(FAMILY_FILE), | ||||
| //   //               result.list.isFamily = false, | ||||
| //   //               userData = result.list, | ||||
| //   //               sharedPref.setString(BLOOD_TYPE, result.patientBloodType), | ||||
| //   //               authenticatedUserObject.user = result.list, | ||||
| //   //               projectViewModel.setPrivilege(privilegeList: res), | ||||
| //   //               sharedPref.setObject(MAIN_USER, result.list), | ||||
| //   //               sharedPref.setObject(USER_PROFILE, result.list), | ||||
| //   //               loginTokenID = result.logInTokenID, | ||||
| //   //               sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), | ||||
| //   //               sharedPref.setString(TOKEN, result.authenticationTokenID), | ||||
| //   //               checkIfUserAgreedBefore(result), | ||||
| //   //             } | ||||
| //   //         } | ||||
| //   //       else | ||||
| //   //         { | ||||
| //   //           // // Navigator.of(context).pop(), | ||||
| //   //           // GifLoaderDialogUtils.hideDialog(context), | ||||
| //   //           // Future.delayed(Duration(seconds: 1), () { | ||||
| //   //           //   AppToast.showErrorToast(message: result); | ||||
| //   //           //   startSMSService(tempType); | ||||
| //   //           // }), | ||||
| //   //         } | ||||
| //   //     }) | ||||
| //   //         .catchError((err) { | ||||
| //   //       // print(err); | ||||
| //   //       // GifLoaderDialogUtils.hideDialog(context); | ||||
| //   //       // Future.delayed(Duration(seconds: 1), () { | ||||
| //   //       //   AppToast.showErrorToast(message: err); | ||||
| //   //       //   startSMSService(tempType); | ||||
| //   //       // }); | ||||
| //   //     }); | ||||
| //   //   } | ||||
| //   // } | ||||
| // | ||||
| //   // checkIfUserAgreedBefore(CheckActivationCode result) { | ||||
| //   //   if (result.isNeedUserAgreement == true) { | ||||
| //   //     //move to agreement page. | ||||
| //   //   } else { | ||||
| //   //     goToHome(); | ||||
| //   //   } | ||||
| //   // } | ||||
| // | ||||
| //   insertIMEI() { | ||||
| //     authService.insertDeviceImei(selectedOption).then((value) => {}).catchError((err) { | ||||
| //       print(err); | ||||
| //     }); | ||||
| //   } | ||||
| // | ||||
| //   // getToDoCount() { | ||||
| //   //   toDoProvider.setState(0, true, "0"); | ||||
| //   //   ClinicListService service = new ClinicListService(); | ||||
| //   //   service.getActiveAppointmentNo(context).then((res) { | ||||
| //   //     if (res['MessageStatus'] == 1) { | ||||
| //   //       toDoProvider.setState(res['AppointmentActiveNumber'], true, "0"); | ||||
| //   //     } else {} | ||||
| //   //   }).catchError((err) { | ||||
| //   //     print(err); | ||||
| //   //   }); | ||||
| //   // } | ||||
| // | ||||
| //   // goToHome() async { | ||||
| //   //   authenticatedUserObject.isLogin = true; | ||||
| //   //   appointmentRateViewModel.isLogin = true; | ||||
| //   //   projectViewModel.isLogin = true; | ||||
| //   //   projectViewModel.user = authenticatedUserObject.user; | ||||
| //   //   await authenticatedUserObject.getUser(getUser: true); | ||||
| //   // | ||||
| //   //   // getToDoCount(); | ||||
| //   // | ||||
| //   //   appointmentRateViewModel | ||||
| //   //       .getIsLastAppointmentRatedList() | ||||
| //   //       .then((value) => { | ||||
| //   //     getToDoCount(), | ||||
| //   //     GifLoaderDialogUtils.hideDialog(AppGlobal.context), | ||||
| //   //     if (appointmentRateViewModel.isHaveAppointmentNotRate) | ||||
| //   //       { | ||||
| //   //         Navigator.pushAndRemoveUntil( | ||||
| //   //             context, | ||||
| //   //             FadePage( | ||||
| //   //               page: RateAppointmentDoctor(), | ||||
| //   //             ), | ||||
| //   //                 (r) => false) | ||||
| //   //       } | ||||
| //   //     else | ||||
| //   //       { | ||||
| //   //         Navigator.pushAndRemoveUntil( | ||||
| //   //             context, | ||||
| //   //             FadePage( | ||||
| //   //               page: LandingPage(), | ||||
| //   //             ), | ||||
| //   //                 (r) => false) | ||||
| //   //       }, | ||||
| //   //     insertIMEI() | ||||
| //   //   }) | ||||
| //   //       .catchError((err) { | ||||
| //   //     print(err); | ||||
| //   //   }); | ||||
| //   // } | ||||
| // | ||||
| //   loading(flag) { | ||||
| //     // setState(() { | ||||
| //     //   isLoading = flag; | ||||
| //     // }); | ||||
| //   } | ||||
| // | ||||
| 
 | ||||
|   Future<bool> loginWithFaceIDAndBiometrics() async { | ||||
|     IOSAuthMessages iosStrings = | ||||
|         const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please reenable your Touch ID'); | ||||
|     bool authenticated = false; | ||||
|     try { | ||||
|       authenticated = await auth.authenticate(localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true, iOSAuthStrings: iosStrings); | ||||
|     } on PlatformException catch (e) { | ||||
|       print(e); | ||||
|       Utils.hideLoading(context); | ||||
|       Utils.showToast("Please enable your Touch or Face ID"); | ||||
|     } | ||||
|     return authenticated; | ||||
|   } | ||||
| 
 | ||||
|   Widget _loginOptionButton(String _title, String _icon, int _flag, int? _loginIndex) { | ||||
|     bool isDisable = ((_flag == 3 && !checkBiometricIsAvailable(BiometricType.face)) || (_flag == 2 && !checkBiometricIsAvailable(BiometricType.fingerprint))); | ||||
|     print("$_title:$isDisable"); | ||||
|     return InkWell( | ||||
|       onTap: isDisable | ||||
|           ? null | ||||
|           : () async { | ||||
|               if (_flag == 0) { | ||||
|                 setState(() { | ||||
|                   //  isMoreOption = true; | ||||
|                 }); | ||||
|               } else { | ||||
|                 Utils.showLoading(context); | ||||
|                 if (_flag == 2 || _flag == 3) { | ||||
|                   bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics(); | ||||
|                   if (authenticateWithFaceAndTouchID) { | ||||
|                     Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboard, (Route<dynamic> route) => false); | ||||
|                     return; | ||||
|                   } else { | ||||
|                     Utils.hideLoading(context); | ||||
|                     return; | ||||
|                   } | ||||
|                 } | ||||
|                 await LoginApiClient().checkMobileAppVersion(); | ||||
|                 await LoginApiClient().memberLogin(AppState().username!, AppState().password!); | ||||
|                 BasicMemberInformationModel? memberInformationModel = await LoginApiClient() | ||||
|                     .mohemmSendActivationCodeByOTPNotificationType(checkBiometricIsAvailable(BiometricType.fingerprint) ? 1 : 0, AppState().memberLoginList?.pMOBILENUMBER, _flag, AppState().username); | ||||
|                 Utils.hideLoading(context); | ||||
|                 OtpDialog( | ||||
|                   context, | ||||
|                   _flag, | ||||
|                   int.tryParse(AppState().memberLoginList?.pMOBILENUMBER ?? ""), | ||||
|                   (value) async { | ||||
|                     Utils.showLoading(context); | ||||
|                     try { | ||||
|                       GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(false, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().username); | ||||
|                       if (genericResponseModel?.errorMessage != null) { | ||||
|                         Utils.showToast(genericResponseModel?.errorMessage ?? ""); | ||||
|                         //  Navigator.pop(context); | ||||
|                       } | ||||
|                       Utils.hideLoading(context); | ||||
|                       Navigator.pop(context); | ||||
|                       Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboard, (Route<dynamic> route) => false); | ||||
|                     } catch (ex) { | ||||
|                       print(ex); | ||||
|                       Utils.hideLoading(context); | ||||
|                       Utils.handleException(ex, null); | ||||
|                     } | ||||
|                   }, | ||||
|                   () => { | ||||
|                     Navigator.pop(context), | ||||
|                   }, | ||||
|                 ).displayDialog(context); | ||||
| 
 | ||||
|                 //    authenticateUser(_flag, isActive: _loginIndex); | ||||
|               } | ||||
|             }, | ||||
|       child: Container( | ||||
|         padding: const EdgeInsets.only(left: 20, right: 20, bottom: 15, top: 28), | ||||
|         decoration: BoxDecoration( | ||||
|           borderRadius: BorderRadius.circular(15), | ||||
|           color: isDisable ? Colors.grey.withOpacity(0.3) : Colors.white, | ||||
|           border: Border.all(color: MyColors.lightGreyEFColor, width: 1), | ||||
|         ), | ||||
|         child: Column( | ||||
|           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|           mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||
|           children: <Widget>[ | ||||
|             SvgPicture.asset( | ||||
|               _icon, | ||||
|               height: 38, | ||||
|               width: 38, | ||||
|               color: isDisable ? MyColors.darkTextColor.withOpacity(0.7) : null, | ||||
|             ), | ||||
|             _title.toText16() | ||||
|           ], | ||||
|         ), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget getButton(int flag) { | ||||
|     switch (flag) { | ||||
|       case 4: | ||||
|         return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/login/verify_whatsapp.svg', flag, null); | ||||
|       case 1: | ||||
|         return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/login/verify_sms.svg', flag, null); | ||||
|       case 2: | ||||
|         return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/login/verify_thumb.svg', flag, BiometricType.fingerprint.index); | ||||
|       case 3: | ||||
|         return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/login/verify_face.svg', flag, BiometricType.face.index); | ||||
|       default: | ||||
|         return const SizedBox(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   bool checkBiometricIsAvailable(BiometricType biometricType) { | ||||
|     bool isAvailable = false; | ||||
|     for (int i = 0; i < _availableBioMetricType.length; i++) { | ||||
|       if (biometricType == _availableBioMetricType[i]) { | ||||
|         isAvailable = true; | ||||
|         break; | ||||
|       } | ||||
|     } | ||||
|     return isAvailable; | ||||
|   } | ||||
| // | ||||
| //   formatDate(date) { | ||||
| //     return date; | ||||
| //     return DateFormat('MMM dd, yyy, kk:mm').format(date); | ||||
| //   } | ||||
| // | ||||
| //   showLoader(bool isTrue) { | ||||
| //     setState(() { | ||||
| //       // isLoading = isTrue; | ||||
| //     }); | ||||
| //   } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,66 @@ | ||||
| import 'package:easy_localization/src/public_ext.dart'; | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; | ||||
| import 'package:mohem_flutter_app/widgets/button/default_button.dart'; | ||||
| 
 | ||||
| class ConfirmDialog extends StatelessWidget { | ||||
|   final String? title; | ||||
|   final String? message; | ||||
|   final String? okTitle; | ||||
|   final VoidCallback? onTap; | ||||
| 
 | ||||
|   const ConfirmDialog({Key? key, this.title, @required this.message, this.okTitle, this.onTap}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Dialog( | ||||
|       backgroundColor: Colors.white, | ||||
|       shape: RoundedRectangleBorder(), | ||||
|       insetPadding: EdgeInsets.only(left: 21, right: 21), | ||||
|       child: Padding( | ||||
|         padding: EdgeInsets.only(left: 20, right: 20, top: 18, bottom: 28), | ||||
|         child: Column( | ||||
|           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|           mainAxisSize: MainAxisSize.min, | ||||
|           children: [ | ||||
|             Row( | ||||
|               crossAxisAlignment: CrossAxisAlignment.start, | ||||
|               children: [ | ||||
|                 Expanded( | ||||
|                   child: Padding( | ||||
|                     padding: const EdgeInsets.only(top: 16.0), | ||||
|                     child: Text( | ||||
|                       title ?? LocaleKeys.confirm.tr(), | ||||
|                       style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: Color(0xff2B353E), height: 35 / 24, letterSpacing: -0.96), | ||||
|                     ), | ||||
|                   ), | ||||
|                 ), | ||||
|                 IconButton( | ||||
|                   padding: EdgeInsets.zero, | ||||
|                   icon: Icon(Icons.close), | ||||
|                   color: Color(0xff2B353E), | ||||
|                   constraints: BoxConstraints(), | ||||
|                   onPressed: () { | ||||
|                     Navigator.pop(context); | ||||
|                   }, | ||||
|                 ) | ||||
|               ], | ||||
|             ), | ||||
|             Text( | ||||
|               message ?? "", | ||||
|               style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff808080), letterSpacing: -0.48), | ||||
|             ), | ||||
|             SizedBox(height: 28), | ||||
|             DefaultButton( | ||||
|               okTitle ?? LocaleKeys.ok.tr(), | ||||
|               onTap == null ? () => Navigator.pop(context) : onTap, | ||||
|               textColor: Colors.white, | ||||
|               //color: Ap.green, | ||||
|             ), | ||||
|           ], | ||||
|         ), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue