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