signInPhone method

  1. @override
Future<void> signInPhone({
  1. required String phoneNumber,
  2. required dynamic verificationCompleted(
    1. ExaAuthUser
    ),
  3. required dynamic verificationFail(
    1. AuthFailure
    ),
  4. required dynamic codeSent(
    1. String?,
    2. int?
    ),
  5. int? seconds,
  6. int? forceResendingToken,
})
override

Initiates phone number sign-in process. Calls callbacks based on the verification process.

Implementation

@override
Future<void> signInPhone({
  required String phoneNumber,
  required Function(ExaAuthUser) verificationCompleted,
  required Function(AuthFailure) verificationFail,
  required Function(String?, int?) codeSent,
  int? seconds,
  int? forceResendingToken,
}) async {
  try {
    var response = false;
    await firebaseAuth.verifyPhoneNumber(
      timeout: Duration(seconds: seconds ?? 60),
      forceResendingToken: forceResendingToken,
      phoneNumber: phoneNumber,
      verificationCompleted: (phoneAuthCredential) async {
        if (ExaAuth.onlyCredential) {
          verificationCompleted(
              ExaAuthUser.withCredential(credential: phoneAuthCredential));
        } else {
          var userCredential =
              await _signInWithCredential(phoneAuthCredential);
          response = true;
          verificationCompleted(
              _resolveUser(firebaseUser: userCredential.user));
        }
      },
      verificationFailed: (e) {
        verificationFail(_resolveException(
            exception: e,
            stackTrace: null,
            locale: 'signInPhone',
            sigInType: SigInType.phone));
      },
      codeSent: (String verificationId, int? forceResendingToken) async {
        if (!response) {
          response = true;
          codeSent.call(verificationId, forceResendingToken);
        }
      },
      codeAutoRetrievalTimeout: (String verificationId) {
        if (!response) {
          response = true;
          codeSent.call(verificationId, forceResendingToken);
        }
      },
    );
  } catch (exception, stackTrace) {
    verificationFail(_resolveException(
        exception: exception,
        stackTrace: stackTrace,
        locale: 'signInPhone',
        sigInType: SigInType.phone));
  }
}