Flutter 颤振-此函数的返回类型为';未来者<;XXX>';,但是';t以return语句结束
我希望使用try-catch块中的值返回future:Flutter 颤振-此函数的返回类型为';未来者<;XXX>';,但是';t以return语句结束,flutter,dart,firebase-authentication,Flutter,Dart,Firebase Authentication,我希望使用try-catch块中的值返回future: Future<UserCredential> createUser(String email, String password) async { try { return FirebaseAuth.instance .createUserWithEmailAndPassword(email: email, password: password); } on FirebaseAu
Future<UserCredential> createUser(String email, String password) async {
try {
return FirebaseAuth.instance
.createUserWithEmailAndPassword(email: email, password: password);
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
Get.snackbar(
'Error Creating Account', 'The password provided is too weak.',
snackPosition: SnackPosition.BOTTOM);
} else if (e.code == 'email-already-in-use') {
Get.snackbar('Error Creating Account',
'The account already exists for that email.',
snackPosition: SnackPosition.BOTTOM);
}
} catch (e) {
print(e);
Get.snackbar('Error Creating Account', e.message as String,
snackPosition: SnackPosition.BOTTOM);
}
}
Future createUser(字符串电子邮件、字符串密码)异步{
试一试{
返回FirebaseAuth.instance
.createUserWithEmailAndPassword(电子邮件:电子邮件,密码:密码);
}关于FireBaseAuth异常捕获(e){
如果(e.code==“弱密码”){
快去吃零食吧(
“创建帐户时出错”,“提供的密码太弱”。”,
snackPosition:snackPosition.BOTTOM);
}否则如果(e.code=='电子邮件已在使用'){
Get.snackbar('创建帐户时出错',
“该电子邮件的帐户已存在。”,
snackPosition:snackPosition.BOTTOM);
}
}捕获(e){
印刷品(e);
Get.snackbar('创建帐户时出错',例如消息为字符串,
snackPosition:snackPosition.BOTTOM);
}
}
但它给出了这样一个错误:
此函数的返回类型为“FutureOr”,但
不会以return语句结束。尝试添加返回语句,或
将返回类型更改为“void”
我是否可以将此返回设置为包含值的future,并处理函数中的错误,或者我是否必须将返回类型更改为
future
?您的返回值必须是使用future的泛型类型声明的类型。如果有任何代码路径不返回UserCredential,则不能使用此声明。如果没有返回值,则为是,它应该是Future
。但似乎至少在一个代码路径中有一个返回值
考虑将所有UI代码移出这个方法,让函数抛出它抛出的任何东西(或重新抛出其他东西)。然后,让此函数的调用方捕获错误并决定在该情况下在UI中显示什么。您的返回值必须是使用Future的泛型类型声明的类型。如果有任何代码路径不返回UserCredential,则不能使用此声明。如果没有返回值,则为是,它应该是
Future
。但似乎至少在一个代码路径中有一个返回值
考虑将所有UI代码移出这个方法,让函数抛出它抛出的任何东西(或重新抛出其他东西)。然后,让此函数的调用方捕获错误,并决定在该情况下在UI中显示什么。当引发异常时,您希望函数返回给调用方什么?如果您希望调用方在失败时获得null
UserCredential
,请将return null
添加到catch
块的末尾。@jamesdlin哦,这很有趣,即使我在签名中添加了return type Future,它似乎也允许我返回null。如果您没有启用新的null安全功能,为什么不启用呢?如果没有空安全性,UserCredential
可以为空。(使用null安全性,返回类型必须是Future
)@jamesdlin它让我吃惊,因为在Typescript中,当您指定了另一个返回类型时,您不能返回null。您可以指定是否要这样做。几天前我试图启用空安全功能,但我一直看到Github的问题说这还不可能,而dart IntelliSense建议如果升级到dart版本2.10.0或更高版本,您可以启用空安全功能,这也是我亲身经历的错误。如果你已经让它工作了,我很想知道。当抛出异常时,你希望函数返回给调用方什么?如果您希望调用方在失败时获得nullUserCredential
,请将return null
添加到catch
块的末尾。@jamesdlin哦,这很有趣,即使我在签名中添加了return type Future,它似乎也允许我返回null。如果您没有启用新的null安全功能,为什么不启用呢?如果没有空安全性,UserCredential
可以为空。(使用null安全性,返回类型必须是Future
)@jamesdlin它让我吃惊,因为在Typescript中,当您指定了另一个返回类型时,您不能返回null。您可以指定是否要这样做。几天前我试图启用空安全功能,但我一直看到Github的问题说这还不可能,而dart IntelliSense建议如果升级到dart版本2.10.0或更高版本,您可以启用空安全功能,这也是我亲身经历的错误。如果你有工作,我有兴趣知道。