Как я могу вернуть переменную из метода проверки телефона FirebaseAuth во флаттере? - PullRequest
1 голос
/ 15 мая 2019

Я использую проверку телефона FirebaseAuth, моя проблема в том, что я использую шаблон блока, поэтому я хочу, чтобы метод проверки телефона FirebaseAuth возвращал некоторую переменную в блок, чтобы указать, существует ли пользователь или нет, чтобы перейти к проверке телефона экран или нет.

Вот мой метод проверки телефона, обратите внимание, что эта функция находится в другом классе, кроме блока:

 static sendPhoneVerificationMessage(String phone) async {
    AuthCredential credential;
    final PhoneVerificationCompleted verificationCompleted = (AuthCredential user){
      print('Inside _sendCodeToPhoneNumber: signInWithPhoneNumber auto succeeded: '+user.toString());
    };

    final PhoneVerificationFailed verificationFailed = (AuthException authException){
      print('Phone number verification failed. Code: ${authException.code}. Message: ${authException.message}');
    };

    final PhoneCodeSent codeSent =
        (String verificationId, [int forceResendingToken]) async {
          verificationCode = verificationId;
      print("code sent to " + phone);
    };

    final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
        (String verificationId) {
      verificationCode = verificationId;
      print("time out");
    };

      await FirebaseAuth.instance.verifyPhoneNumber(
          phoneNumber: phone,
          timeout: const Duration(seconds: 120),
          verificationCompleted: verificationCompleted,
          verificationFailed: verificationFailed,
          codeSent: codeSent,
          codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);

  }

Это функция внутри блока, которая вызывает предыдущую функцию

  static sendPhoneVerificationMessage(String phone) async {
    String formattedPhone = "+2" + phone;
    await AuthAPI.sendPhoneVerificationMessage(formattedPhone);
  }

Я хочу выполнить какое-либо действие, основанное на возврате из функции sendPhoneVerificationMessage

1 Ответ

0 голосов
/ 15 мая 2019

Я использовал проверку телефона FirebaseAuth с шаблоном блока, как вы пытаетесь.

В моем случае я управляю потоком. У меня есть Enum, который содержит все возможные состояния процесса проверки, и для каждого состояния я называю _stream.sink.add(MyEnum.CURRENT_STATE). (Вы можете сделать это управление в обратных вызовах.)

И, наконец, на мой взгляд, слушатели меняют интерфейс в соответствии с шагом, переданным потоку.

[бесплатные советы]
Будьте осторожны с временем ожидания, которое вы проходите. Если вы установили тайм-аут, отличный от нуля, приложение попытается автоматически получить проверочный код в SMS. Если это произойдет, вы попадете в verificationCompleted обратный вызов, ваш проверочный код будет автоматически аннулирован, и вы больше не сможете его использовать.

Вы можете правильно управлять этой ситуацией, получая пользователя внутри метода verificationCompleted, или вы можете передать ноль в тайм-аут и отключить это поведение.

...