firebase - 投但不接
问题描述
我正在尝试使用 flutter-fire 包执行 Firebase 电话身份验证(使用 SMS),但是在“验证”过程中检查错误情况时遇到了一些障碍。
注意:抛出发生在 ChangeNotifierProvider 中,而捕获发生在一个单独的小部件中,该小部件使用提供者获取状态数据。
当我尝试调试时,我看到错误被抛出,但 catch 块没有被调用。
这是引发错误的地方(PhoneVerificationFailed 函数):
`
Future<void> verifyPhoneNumber(String phoneNumber) async {
print("Verify Phone Number called");
final PhoneCodeAutoRetrievalTimeout autoRetrieve = (String verId) {
this._verificationID = verId;
};
final PhoneCodeSent smsCodeSent = (String verId, [int forceCodeResend]) {
this._verificationID = verId;
print("SMS Sent");
this.smsSent = true;
notifyListeners();
throw (HttpException("Test"));
};
final PhoneVerificationCompleted verificationSuccessful =
(AuthCredential user) {
print("verified");
};
final PhoneVerificationFailed verificationFailed =
(AuthException exception) {
print("failed, ${exception.message}");
throw (exception);
};
this._phoneNumber = phoneNumber;
notifyListeners();
var result = await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: phoneNumber,
codeAutoRetrievalTimeout: autoRetrieve,
codeSent: smsCodeSent,
timeout: const Duration(seconds: 0),
verificationCompleted: verificationSuccessful,
verificationFailed: verificationFailed,
);
return result;
}`
这是我有捕获代码的地方:
`Future<void> _submitPhoneNumber() async {
_formKey2.currentState.save();
setState(() {
_isLoading = true;
});
try {
await Provider.of<Auth>(context, listen: false)
.verifyPhoneNumber(_authData['phoneNo']);
setState(() {
_isLoading = false;
});
} catch (error) {
print("Exception caught ${error.message}");
errorSnackBar(error.message, "Close");
}
}
`
编辑:我正在使用https://dart.dev/codelabs/async-await#example-async-and-await-with-try-catch中的代码游乐场,我发现只有在Future 返回一些东西,即使返回类型是 Future。这可能是根本原因吗?
解决方案
您需要捕获您抛出的异常。
try {
await Provider.of<Auth>(context, listen: false)
.verifyPhoneNumber(_authData['phoneNo']);
setState(() {
_isLoading = false;
});
} on HttpException catch (e) { // add on HttpException
print("Exception caught ${error.message}");
errorSnackBar(error.message, "Close");
}
}
推荐阅读
- php - 将服务注入 EntityRepository 是个好主意吗?
- javascript - 如何在提交时处理 q-input / preventDefault 中的“输入”?
- java - 带有JDK11的maven:javac:无效标志:--release
- c# - 在 C# 中强制实现可全局访问的类
- python - Python SyntaxError:无效语法 [elif my_move == 'rock']
- linux - 为什么 mremap 只访问 4096 字节内存?
- python - 'DataFrame' 对象没有属性 'Hight'
- c++11 - 在 Qt 中显示非常量字符串(错误消息)
- android - 是否可以将文件添加到 /data/data 中的 Android 应用程序文件夹?
- uwp - 模板化 ItemsControl 弹出窗口中的 ItemsPresenter 在第一次显示时仅显示 1 个项目,在第二次显示时加载所有内容