【发布时间】:2021-09-06 23:16:35
【问题描述】:
我正在尝试使用 Firebase 验证手机。
第一次验证(第一次verifyPhoneNumberFirebase调用没问题(打开验证码,没验证按回,还是去codeSent,不知道为什么)。
但是第二次验证(第二次verifyPhoneNumberFirebase,发生在第一次验证几秒钟之后)超时,运行codeAutoRetrievalTimeout。但奇怪的是 completer 完成了,尽管它被重新启动,但前一次调用 (codeSent) 的结果。这是代码
Future<DataResponse> verifyPhoneNumberFirebase({String phoneNumb}) async {
final completer = Completer<DataResponse>(); /// <--- init and re-init
_auth
.verifyPhoneNumber(
phoneNumber: phoneNumb,
verificationCompleted: (PhoneAuthCredential credential) {
completer.complete(successSomething(verificationId));
},
verificationFailed: (FirebaseAuthException e) {
completer.complete(errorHandling('error');
}
},
codeSent: (String verificationId, int resendToken) {
completer.complete(successSomething(verificationId));
/// the first complete,
/// and somehow the second complete,
/// even though it did not go to this line in the second call
},
codeAutoRetrievalTimeout: (String verificationId) {
completer.complete(errorHandling('error'); /// <----- already completed ???
},
);
return completer.future;
}
这里是日志
[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Bad state: Future already completed
_AsyncCompleter.complete (dart:async/future_impl.dart:45:31)
...
现在我不知道如何获得codeAutoRetrievalTimeout 输出。
【问题讨论】:
标签: android ios firebase flutter firebase-authentication