null_closures
不要在期望使用闭包作为参数的地方传递 null
。
详情
#不要 在期望使用闭包作为参数的地方传递 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
的命名参数onMatch
和onNonMatch
不良示例
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 映射语法配置 linter 规则,请在 linter > rules 下添加 null_closures: true
analysis_options.yaml
yaml
linter:
rules:
null_closures: true