跳到主要内容

null_closures

稳定版
推荐
有修复可用

不要将 null 作为参数传递到需要闭包的地方。

详情

#

不要null 作为参数传递到需要闭包的地方。

通常,传递给方法的闭包仅在有条件的情况下调用,因此测试和“happy path”生产调用不会揭示 null 将导致抛出异常。

此规则仅捕获在以下位置传递到需要闭包的地方的 null 字面量

构造函数

#
  • 来自 dart:async
    • Future 在第 0 个位置参数
    • Future.microtask 在第 0 个位置参数
    • Future.sync 在第 0 个位置参数
    • Timer 在第 0 个位置参数
    • Timer.periodic 在第 1 个位置参数
  • 来自 dart:core
    • List.generate 在第 1 个位置参数

静态函数

#
  • 来自 dart:async
    • scheduleMicrotask 在第 0 个位置参数
    • Future.doWhile 在第 0 个位置参数
    • Future.forEach 在第 0 个位置参数
    • Future.wait 在名为 cleanup 的参数
    • Timer.run 在第 0 个位置参数

实例方法

#
  • 来自 dart:async
    • Future.then 在第 0 个位置参数
    • Future.complete 在第 0 个位置参数
  • 来自 dart:collection
    • Queue.removeWhere 在第 0 个位置参数
    • Queue.retain
    • Iterable.firstWhere 在第 0 个位置参数,以及名为 orElse 的参数
    • Iterable.forEach 在第 0 个位置参数
    • Iterable.fold 在第 1 个位置参数
    • Iterable.lastWhere 在第 0 个位置参数,以及名为 orElse 的参数
    • Iterable.map 在第 0 个位置参数
    • Iterable.reduce 在第 0 个位置参数
    • Iterable.singleWhere 在第 0 个位置参数,以及名为 orElse 的参数
    • Iterable.skipWhile 在第 0 个位置参数
    • Iterable.takeWhile 在第 0 个位置参数
    • Iterable.where 在第 0 个位置参数
    • List.removeWhere 在第 0 个位置参数
    • List.retainWhere 在第 0 个位置参数
    • String.replaceAllMapped 在第 1 个位置参数
    • String.replaceFirstMapped 在第 1 个位置参数
    • String.splitMapJoin 在名为 onMatchonNonMatch 的参数

错误示例

dart
[1, 3, 5].firstWhere((e) => e.isOdd, orElse: null);

正确示例

dart
[1, 3, 5].firstWhere((e) => e.isOdd, orElse: () => null);

启用

#

要启用 null_closures 规则,请在您的 analysis_options.yaml 文件中的 linter > rules 下添加 null_closures

analysis_options.yaml
yaml
linter:
  rules:
    - null_closures

如果您改为使用 YAML map 语法来配置 linter 规则,请在 linter > rules 下添加 null_closures: true

analysis_options.yaml
yaml
linter:
  rules:
    null_closures: true