【问题标题】:Does a function without a return statement always return null in Flutter?Flutter中没有return语句的函数是否总是返回null?
【发布时间】:2021-08-15 12:14:56
【问题描述】:

以下函数的返回类型是Future<File?>,但编译器不会抱怨如果选择器没有返回图片就没有返回值。

static Future<File?> takeImage() async {
    PickedFile? pickedFile = await ImagePicker().getImage(source: ImageSource.camera);
    if (pickedFile != null) {
      print('PHOTO TAKEN');
      return File(pickedFile.path);
    } else {
      print('NO PHOTO TAKEN');
    }
  }

如果照片没拍,我必须返回null 不是更有意义吗?

没有return语句的方法总是返回null吗?

上面的例子很好地暗示了它,而且像这样简单的东西也可以编译。

static String? s() {}

有人可以澄清发生了什么吗?

【问题讨论】:

  • void 一种特殊类型,表示从未使用过的值。像 printInteger() 和 main() 这样没有显式返回值的函数具有 void 返回类型。
  • 仔细阅读A tour of the Dart language - 关于Functions的部分

标签: flutter dart nullable non-nullable flutter-future


【解决方案1】:

感谢@pskink 为我指明了正确的方向。

直接来自the documentation

返回值
所有函数都返回一个值。如果没有指定返回值,则语句返回null;隐式附加到函数体。

【讨论】:

    【解决方案2】:

    没有return语句的方法总是返回null吗?

    是的,这是一个简单的例子

    Future<void> main() async {
      var str = await start();
      print(str);
    }
    
    Future<String> start() async {
      await Future.delayed(Duration(seconds: 2));
    }
    

    输出:

    null
    

    将其粘贴到 dartpad 以查看它的工作原理 :)

    【讨论】:

    • 运行 Dart 2.13.0 对我不起作用。它不会编译并出现错误:主体可能正常完成,导致返回“null”,但返回类型可能是不可为空的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2015-03-14
    • 2021-02-21
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多