Future.delayed(const Duration(seconds: 1))应指定什么泛型类型?
结论
此处Future的泛型应当指定为void,符合lint规则的正确写法为:
await Future<void>.delayed(const Duration(seconds: 1));
判断依据
- 从构造逻辑看:
Future.delayed在仅传入时长参数、不传入第二个任务回调computation时,延时结束后不会产生任何有效业务返回值,await的作用仅仅是等待延时结束,不需要接收返回结果。 - 不同类型的语义差异:
- 不选
Null:Future<Null>代表延时结束后会返回一个可访问的null值,对应「存在返回值、只是值为null」的场景,和无回调延时不产出任何值的设计语义不符。 - 不选其他任意实体类型:如果指定为
int、自定义类等其他类型,完全不符合构造函数的实际运行逻辑,后续如果误写代码接收返回值还会触发不必要的类型错误。 - 选
void的原因:Future<void>的语义就是「仅等待任务执行完成,不需要、也不应该使用该Future的返回值」,完全匹配纯延时等待的使用场景,是Dart开发中的标准写法,也完全符合always_specify_types规则的类型要求。
- 不选
内容的提问来源于stack exchange,提问作者gd08xxx
相关产品推荐
相关产品推荐

