Dart 2:Future <void>和Future <Null>之间的差异

Rol*_*iza 11 asynchronous future dart

具有不返回值的异步函数,什么是理想的返回类型Future<Null>Future<void>?,或者更具体地说,什么是使用两种有什么区别?两者都是合法的,在这两种情况下,函数的返回值都是Future可以解析的null.以下代码打印null两次:

import 'dart:async';

Future<void> someAsync() async {}
Future<Null> otherAsync() async {}

main() {
    someAsync().then((v) => print(v));
    otherAsync().then((v) => print(v));
}
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 15

该类型Null仅允许该值null

该类型void允许任何类型的值,但传达不应使用该值.

我还不清楚工具支持将如何对待void.可能存在使用void值提示或警告的linter规则.

Null之前使用的是代替void以前的,因为void只支持作为返回类型的方法/函数.

  • 没有"无效"将变得更加普遍.`void`**允许**任何返回值,**但**调用者如果使用返回值则会收到警告.Dart试图摆脱你的方式,如果`void`不允许任何值,`()=> foo()`会因为隐式`return`而导致错误.另见eernstg的[this comment](https://github.com/dart-lang/sdk/issues/32558#issuecomment-376115082) (4认同)