Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振-此函数的返回类型为';未来者<;XXX>';,但是';t以return语句结束_Flutter_Dart_Firebase Authentication - Fatal编程技术网

Flutter 颤振-此函数的返回类型为';未来者<;XXX>';,但是';t以return语句结束

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

我希望使用try-catch块中的值返回future:

  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或更高版本,您可以启用空安全功能,这也是我亲身经历的错误。如果你已经让它工作了,我很想知道。当抛出异常时,你希望函数返回给调用方什么?如果您希望调用方在失败时获得null
UserCredential
,请将
return null
添加到
catch
块的末尾。@jamesdlin哦,这很有趣,即使我在签名中添加了return type Future,它似乎也允许我返回null。如果您没有启用新的null安全功能,为什么不启用呢?如果没有空安全性,
UserCredential
可以为空。(使用null安全性,返回类型必须是
Future
)@jamesdlin它让我吃惊,因为在Typescript中,当您指定了另一个返回类型时,您不能返回null。您可以指定是否要这样做。几天前我试图启用空安全功能,但我一直看到Github的问题说这还不可能,而dart IntelliSense建议如果升级到dart版本2.10.0或更高版本,您可以启用空安全功能,这也是我亲身经历的错误。如果你有工作,我有兴趣知道。