目录

null_closures

不要将 null 作为期望闭包的参数传递。

此规则从 Dart 2.0 开始可用。

规则集:推荐, flutter

此规则有可用的快速修复

详情

#

不要null 作为期望闭包的参数传递。

通常,传递给方法的闭包只会按条件调用,因此测试和“快乐路径”生产调用不会显示 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