我正在使用FirebaseAuth电话验证,我的问题是我正在使用bloc模式,因此我希望FirebaseAuth电话验证方法向Bloc返回一些变量以指示用户是否已经存在,以便导航到电话验证屏幕是否显示。
这是我的手机验证方法,请注意,此功能在另一个类中,不在Bloc中:
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);
}
这是bloc内部的函数,它调用前一个函数
static sendPhoneVerificationMessage(String phone) async {
String formattedPhone = "+2" + phone;
await AuthAPI.sendPhoneVerificationMessage(formattedPhone);
}
我要根据sendPhoneVerificationMessage函数的返回结果执行一些操作
答案 0 :(得分:0)
我已将FirebaseAuth电话验证与您尝试使用的集团模式一起使用。
就我而言,我使用Stream进行控件。
我有一个枚举,其中包含验证过程的所有可能状态,对于每个状态,我都称为_stream.sink.add(MyEnum.CURRENT_STATE)
。 (您可以在回调中执行此控制。)
最后,在我看来,侦听器根据传递到流的步骤来更改UI。
[免费提示]
请小心超时。如果您传递的超时时间不同于零,则应用程序将尝试自动在SMS内获取验证码。如果发生这种情况,您将陷入verificationCompleted
回调中,您的验证码将自动失效,无法再使用。
您可以对此情况进行正确的控制,以使用户进入verificationCompleted
方法,也可以将零传递给超时并禁用此行为。