avoid_futureor_void
避免使用 'FutureOr
详情
#避免 使用 FutureOr<void>
作为结果的类型。这种类型是有问题的,因为它可能看起来编码了一个结果要么是 Future<void>
,要么结果应该被丢弃(当它是 void
时)。然而,没有安全的方法来检测我们是哪种情况(因为 void
类型的表达式可以评估为任何对象,包括任何类型的 future)。
拥有一个类型,其含义类似于“忽略此对象;另外,看看它,因为它可能是一个 future”,这在概念上也是不合理的。
对于类型 FutureOr<void>
的逆变发生(例如,对于形式参数的类型)有一个例外,并且对于这些发生不会发出警告。此例外的原因是该类型不描述结果,它描述了其他人提供的值的约束。同样,类型别名声明也有一个例外,因为它们很可能在逆变位置使用(例如,作为形式参数的类型)。因此,在类型别名声明中,仅检查类型参数边界。
类型 FutureOr<void>
的一个常用替代品是 Future<void>?
。这种类型编码了结果要么是 Future<void>
要么是 null,并且在运行时没有歧义,因为没有对象可以同时具有两种类型。
可能并不总是可以使用类型 Future<void>?
作为类型 FutureOr<void>
的替代品,因为后者是所有类型的超类型,而前者不是。在这种情况下,将 FutureOr<void>
替换为类型 void
可能是有效的补救措施。
错误
FutureOr<void> m() {...}
正确
Future<void>? m() {...}
此规则为实验性规则。 它正在评估中,可能会被更改或删除。欢迎对其行为提供反馈!主要问题在这里:https://github.com/dart-lang/sdk/issues/59232。
启用
#要启用 avoid_futureor_void
规则,请在您的 analysis_options.yaml
文件中的 linter > rules 下添加 avoid_futureor_void
linter:
rules:
- avoid_futureor_void
如果您改为使用 YAML 映射语法来配置 linter 规则,请在 linter > rules 下添加 avoid_futureor_void: true
linter:
rules:
avoid_futureor_void: true
除非另有说明,否则本网站上的文档反映了 Dart 3.7.1 版本。页面上次更新于 2025-03-07。 查看源代码 或 报告问题。