Flutter中没有return语句的函数是不是总是返回null?

Posted

技术标签:

【中文标题】Flutter中没有return语句的函数是不是总是返回null?【英文标题】: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的部分 【参考方案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”,但返回类型可能是不可为空的类型。

以上是关于Flutter中没有return语句的函数是不是总是返回null?的主要内容,如果未能解决你的问题,请参考以下文章

10-1:return可以没有返回值吗?

PHP查询语句,如何返回总记录数??

函数---参数

对于不返回 void 的 C++ 函数,是不是必须使用 return 语句?

数据结构中若函数有return就一定要在函数名前写status吗?

C语言中return语句怎样返回两个或多个值