我应该怎么做才能发出 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()));
}
}
}
这是验证电话和发送代码的两个简单功能:
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"));
}