Flutter Bloc:如何发出 FirebaseVerificationCompletedEvent 并访问凭证值?

问题描述 投票:0回答:1

我应该怎么做才能发出 FirebaseVerificationCompletedEvent 并获取凭据值?在页面上它停留在 FirebaseCodeSend

这是我的集团:

class FirebaseOtpBloc extends Bloc<FirebaseOtpEvent, FirebaseOtpState> {
  FirebaseOtpBloc() : super(FirebaseOtpInitial()) {
    on<FirebaseVerifyPhoneNumber>(_onFirebaseVerifyPhoneNumber);
  }
  void _onFirebaseVerifyPhoneNumber(
      FirebaseVerifyPhoneNumber event, Emitter<FirebaseOtpState> emit) async {
    try {
      emit(FirebaseCodeSend());
      await FirebaseAuth.instance.verifyPhoneNumber(
        phoneNumber: event.phoneNumber,
        verificationCompleted: (PhoneAuthCredential credential) {
          emit(FirebaseVerificationCompleted(credential));
        },
        verificationFailed: (FirebaseAuthException e) {
          emit(FirebaseVerificationFailed(e.toString()));
        },
        codeSent: (String verificationId, int? resendToken) {},
        codeAutoRetrievalTimeout: (String verificationId) {},
      );
    } catch (e) {
      emit(FirebaseVerificationFailed(e.toString()));
    }
  }
}
flutter dart flutter-bloc
1个回答
0
投票

这是验证电话和发送代码的两个简单功能:

submitWithPhoneNumber(String phoneNumber)async {
    await auth.verifyPhoneNumber(
      phoneNumber: '$phoneNumber',
      codeSent: (String verificationId, int? resendToken) async {
         // here where you can save the verificationID and phoneNumber if you need it 

        emit(state.copyWith(verificationId: verificationId,phoneNumber: phoneNumber));
      },
      verificationCompleted: (PhoneAuthCredential phoneAuthCredential) async {

      },
      verificationFailed: (FirebaseAuthException error) {
        EasyLoading.showError(error.message ?? "");
      },
      codeAutoRetrievalTimeout: (String verificationId) {
      },
    );
  }

  submitWithCode(String code)async{
    PhoneAuthCredential credential = PhoneAuthProvider.credential(verificationId: state.verificationId ??"", smsCode: code);
    await auth.signInWithCredential(credential).then((value) => //here have the authentication data"));
  }
© www.soinside.com 2019 - 2024. All rights reserved.