内容

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 文件中添加 null_closureslinter > rules

analysis_options.yaml
yaml
linter:
  rules:
    - null_closures