我如何 return 来自 FirebaseAuth phone 验证方法的变量?
How can I return variable from FirebaseAuth phone verification method in flutter?
我正在使用 FirebaseAuth phone 验证,我的问题是我正在使用 bloc 模式,所以我希望 FirebaseAuth phone 验证方法 return Bloc 的一些变量指示用户是否已存在或不导航到 phone 验证屏幕。
这里是我的phone验证方法,注意这个函数在另一个class不在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 函数的 return 执行一些操作
我已经像您尝试的那样使用 FirebaseAuth phone 块模式验证。
就我而言,我使用 Stream 进行控制。
我有一个枚举,其中包含验证过程的所有可能状态,对于每个状态,我调用 _stream.sink.add(MyEnum.CURRENT_STATE)
。 (您可以在回调中执行此控制。)
最后,在我看来,听众根据传递给流的步骤更改 UI。
[免费提示]
小心你传递的超时。如果您传递的超时时间不为零,应用程序将尝试自动获取短信中的验证码。如果出现这种情况,您将陷入verificationCompleted
回调,您的验证码将自动失效,无法再使用。
您可以正确控制这种情况,让用户进入 verificationCompleted
方法,或者您可以将零传递给超时并禁用此行为。
我正在使用 FirebaseAuth phone 验证,我的问题是我正在使用 bloc 模式,所以我希望 FirebaseAuth phone 验证方法 return Bloc 的一些变量指示用户是否已存在或不导航到 phone 验证屏幕。
这里是我的phone验证方法,注意这个函数在另一个class不在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 函数的 return 执行一些操作
我已经像您尝试的那样使用 FirebaseAuth phone 块模式验证。
就我而言,我使用 Stream 进行控制。
我有一个枚举,其中包含验证过程的所有可能状态,对于每个状态,我调用 _stream.sink.add(MyEnum.CURRENT_STATE)
。 (您可以在回调中执行此控制。)
最后,在我看来,听众根据传递给流的步骤更改 UI。
[免费提示]
小心你传递的超时。如果您传递的超时时间不为零,应用程序将尝试自动获取短信中的验证码。如果出现这种情况,您将陷入verificationCompleted
回调,您的验证码将自动失效,无法再使用。
您可以正确控制这种情况,让用户进入 verificationCompleted
方法,或者您可以将零传递给超时并禁用此行为。