import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authentication_req.dart'; import 'package:diplomaticquarterapp/models/Authentication/send_activation_request.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_request.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/otp/sms-popup.dart'; import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:flutter/services.dart'; import 'package:flutter_flexible_toast/flutter_flexible_toast.dart'; import 'package:local_auth/local_auth.dart'; class ConfirmLogin extends StatefulWidget { @override _ConfirmLogin createState() => _ConfirmLogin(); } class _ConfirmLogin extends State { final LocalAuthentication auth = LocalAuthentication(); List _availableBiometrics; var sharedPref = new AppSharedPreferences(); bool authenticated; final authService = new AuthProvider(); int mobileNumber; String errorMsg = ''; var user; bool isLoading = false; CheckPatientAuthenticationReq registerd_data; var zipCode; var patientOutSA; var loginTokenID; var loginType; var deviceToken; var lastLogin; int selectedOption; bool onlySMSBox = false; var userData; @override void initState() { _getAvailableBiometrics(); setDefault(); super.initState(); } @override Widget build(BuildContext context) { return AppScaffold( appBarTitle: TranslationBase.of(context).confirm, isShowAppBar: true, body: isLoading == false ? SingleChildScrollView( child: Container( padding: EdgeInsets.all(20), height: SizeConfig.realScreenHeight * .9, width: SizeConfig.realScreenWidth, child: Column( children: [ Expanded( flex: 3, child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.asset( 'assets/images/habib-logo.png', height: 80, width: 80, ), this.onlySMSBox == false ? AppText( TranslationBase.of(context) .verifyLoginWith, fontSize: SizeConfig.textMultiplier * 3.5, textAlign: TextAlign.left, ) : AppText( TranslationBase.of(context) .verifyFingerprint2, fontSize: SizeConfig.textMultiplier * 2.5, textAlign: TextAlign.left, ), ])), Expanded( flex: 4, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ onlySMSBox == false ? Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: InkWell( onTap: () => { authenticateUser( 3, BiometricType .face.index) }, child: RoundedContainer( backgroundColor: BiometricType.face .index == 1 ? Colors.white : Colors.white .withOpacity( .7), borderColor: Colors.grey, showBorder: true, child: Padding( padding: EdgeInsets.fromLTRB( 20, 10, 20, 10), child: Column( mainAxisAlignment: MainAxisAlignment .center, children: [ Image.asset( 'assets/images/login/101.png', height: SizeConfig .imageSizeMultiplier * 13, width: SizeConfig .imageSizeMultiplier * 16, ), SizedBox( height: 20, ), AppText( TranslationBase.of( context) .verifyFaceID, fontSize: SizeConfig .textMultiplier * 2, ) ], ), )))), Expanded( child: InkWell( onTap: () => { authenticateUser( 2, BiometricType .fingerprint .index) }, child: RoundedContainer( backgroundColor: BiometricType .fingerprint .index == 1 ? Colors.white : Colors.white .withOpacity( .7), borderColor: Colors.grey, showBorder: true, child: Padding( padding: EdgeInsets.fromLTRB( 25, 10, 25, 10), child: Column( children: [ Image.asset( 'assets/images/login/102.png', height: SizeConfig .imageSizeMultiplier * 13, width: SizeConfig .imageSizeMultiplier * 16, ), SizedBox( height: 20, ), AppText( TranslationBase.of( context) .verifyFingerprint, fontSize: SizeConfig .textMultiplier * 2, ) ], ), )))) ], ) : SizedBox(), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: InkWell( onTap: () => {authenticateUser(1, true)}, child: RoundedContainer( borderColor: Colors.grey, showBorder: true, child: Padding( padding: EdgeInsets.fromLTRB( 20, 10, 20, 10), child: Column( mainAxisAlignment: MainAxisAlignment .center, children: [ Image.asset( 'assets/images/login/103.png', height: SizeConfig .imageSizeMultiplier * 13, width: SizeConfig .imageSizeMultiplier * 16, ), SizedBox( height: 20, ), AppText( TranslationBase.of( context) .verifySMS, fontSize: SizeConfig .textMultiplier * 2, ) ], ), )))), Expanded( child: InkWell( onTap: () => {authenticateUser(4, true)}, child: RoundedContainer( borderColor: Colors.grey, showBorder: true, child: Padding( padding: EdgeInsets.fromLTRB( 25, 10, 25, 10), child: Column( children: [ Image.asset( 'assets/images/login/104.png', height: SizeConfig .imageSizeMultiplier * 13, width: SizeConfig .imageSizeMultiplier * 16, ), SizedBox( height: 20, ), AppText( TranslationBase.of( context) .verifyWhatsApp, fontSize: SizeConfig .textMultiplier * 2, ) ], ), )))) ], ), ]), ), Expanded( flex: 1, child: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ // Row( // children: [ // Expanded( // child: RaisedButton( // color: Colors.grey, // textColor: Colors.white, // child: // Text(TranslationBase.of(context).registerNow), // onPressed: () => { // Navigator.of(context).pushNamed( // REGISTER, // ) // }, // )) // ], // ), ], )) ], ))) : AppCircularProgressIndicator()); } Future _getAvailableBiometrics() async { var availableBiometrics; try { availableBiometrics = await auth.getAvailableBiometrics(); } on PlatformException catch (e) { print(e); } if (!mounted) return; setState(() { _availableBiometrics = availableBiometrics; }); } authenticateUser(type, isActive) { this.selectedOption = type; //this.selectedOption && !this.onlySMSBox ? this.selectedOption : this.fingrePrintBefore ? this.fingrePrintBefore : el.value; switch (type) { case 1: this.loginWithSMS(type, isActive); break; case 2: this.loginWithFingurePrintFace(type, isActive); break; case 3: this.loginWithFingurePrintFace(type, isActive); break; case 4: this.loginWithSMS(type, isActive); break; default: break; } sharedPref.setInt(LAST_LOGIN, type); //this.cs.sharedService.setStorage(this.selectedOption, AuthenticationService.LAST_LOGIN); } loginWithSMS(type, isActive) { //if (!el.disabled) { if (this.user != null && this.registerd_data != null) { this.checkUserAuthentication(type); } else { if (this.loginTokenID != null) { this.sendActivationCode(type); } else { this.checkUserAuthentication(type); } } } checkUserAuthentication(type) {} sendActivationCode(type) { var request = this.getCommonRequest(); loading(true); this.authService.sendActivationCode(request).then((result) => { if (result['isSMSSent'] == true) {loading(false), this.startSMSService(type)} else {} }); } startSMSService(type) { new SMSOTP( context, type, this.mobileNumber, (value) => {this.checkActivationCode(value: value)}, () => { print('Faild..'), }, ).displayDialog(context); } loginWithFingurePrintFace(type, isActive) async { if (isActive == 1) { // this.startBiometricLoginIfAvailable(); authenticated = await auth.authenticateWithBiometrics( localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true); print(authenticated); if (authenticated == true) { var request = this.getCommonRequest(); this.getMobileInfo(request); } } } getMobileInfo(request) { this.authService.getLoginInfo(request).then((result) => { if (!result['SMSLoginRequired']) { this.loginTokenID = result.logInTokenID, this.patientOutSA = result.patientOutSA, // sms for register the biometric if (result.isSMSSent) { this.onlySMSBox = false, //this.button(); } else {checkActivationCode()} } else { if (result['IsAuthenticated']) { setState(() { this.onlySMSBox = true; }), //sharedPref.setBool(ONLY_SMS, true), // this.cs.sharedService.setSharedData(true, AuthenticationService.ONLY_SMS); //this.cs.sharedService.setSharedData(this.selectedOption, AuthenticationService.FINGUREPRINT_BEFORE); // this.cs.confirmLogin(); //this.button(); } // else // { // // this.cs.presentAlert(result.ErrorEndUserMessage); // } } }); } setDefault() async { // this.user = this.cs.sharedService.getSharedData( // AuthenticationService.IMEI_USER_DATA, // false // ); 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 ? "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; } this.deviceToken = await sharedPref.getString(PUSH_TOKEN); this.lastLogin = await sharedPref.getInt( LAST_LOGIN); //this.cs.sharedService.getStorage(AuthenticationService.LAST_LOGIN); } getCommonRequest() { var request = SendActivationRequest(); request.patientMobileNumber = this.mobileNumber; request.mobileNo = '0' + this.mobileNumber.toString(); request.deviceToken = this.deviceToken; request.projectOutSA = this.patientOutSA; request.loginType = this.selectedOption; request.oTPSendType = this.selectedOption == 1 ? 1 : 2; request.zipCode = this.zipCode; request.isRegister = false; request.logInTokenID = this.loginTokenID ?? ""; if (this.registerd_data != null) { request.searchType = this.registerd_data.searchType == 1 ? this.registerd_data.searchType : 1; request.patientID = this.registerd_data.patientID != 0 ? this.registerd_data.patientID : 0; request.patientIdentificationID = request.nationalID = this.registerd_data.patientIdentificationID; } else { request.searchType = request.searchType == 1 ? request.searchType : 2; request.patientID = int.parse(this.user.PatientID); request.patientID = request.nationalID = request.nationalID != null ? request.nationalID : 0; } return request; } checkActivationCode({value}) { loading(true); var request = this.getCommonRequest().toJson(); this.authService.checkActivationCode(request, value).then((result) => { this.userData = result.list, //AuthenticatedUser.fromJson(result['List'][0]), this.sharedPref.setObject(USER_PROFILE, result.list), this.sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), this.checkIfUserAgreedBefore(result), loading(false) }); } checkIfUserAgreedBefore(CheckActivationCode result) { print(result); if (result.isNeedUserAgreement) { //move to agreement page. } else { goToHome(); } } goToHome() { authService.insertDeviceImei().then((value) => print(value)); // Navigator.of(context).pushNamed(HOME); // const request = new LoginRequest(); // if (this.loginType === AuthenticationService.IDENTIFCIATION_LOGIN_TYPE) { // request.PatientID = 0; // } else { // request.PatientID = Number(this.id); // } // this.newRating(request); // } // public newRating(request: any) { // this.authService // .checkIfRated( // request, // () => { // this.gotoHome(); // }, // this.ts.trPK("general", "retry") // ) // .subscribe((result: CheckUserRatingResponse) => { // if (this.cs.validResponse(result)) { // this.cs.sharedService.setSharedData(result, AuthenticationService.SURVEY_DATA); // if (result.IsLastAppoitmentRatedList.length === 0) { // this.cs.openHome(); // } else { // this.ProjectID = result.IsLastAppoitmentRatedList[0].ProjectID; // this.AppointmentNo = result.IsLastAppoitmentRatedList[0].AppointmentNo; // this.cs.sharedService.setSharedData(true, "ratePage"); // this.showRateModal(); // } // } // }); } loading(flag) { setState(() { isLoading = flag; }); } }