null_closures
不要在期望使用闭包作为参数的地方传递 null。
详情
#不要 在期望使用闭包作为参数的地方传递 null。
传递给方法的闭包通常只会根据条件调用,因此测试和“正常路径”生产调用可能不会发现传递 null 会导致抛出异常。
此规则仅捕获在以下位置期望使用闭包时传递的 null 字面量
构造函数
#- 来自
dart:asyncFuture的第 0 个位置参数Future.microtask的第 0 个位置参数Future.sync的第 0 个位置参数Timer的第 0 个位置参数Timer.periodic的第 1 个位置参数
- 来自
dart:coreList.generate的第 1 个位置参数
静态函数
#- 来自
dart:asyncscheduleMicrotask的第 0 个位置参数Future.doWhile的第 0 个位置参数Future.forEach的第 0 个位置参数Future.wait的命名参数cleanupTimer.run的第 0 个位置参数
实例方法
#- 来自
dart:asyncFuture.then的第 0 个位置参数Future.complete的第 0 个位置参数
- 来自
dart:collectionQueue.removeWhere的第 0 个位置参数Queue.retainIterable.firstWhere的第 0 个位置参数和命名参数orElseIterable.forEach的第 0 个位置参数Iterable.fold的第 1 个位置参数Iterable.lastWhere的第 0 个位置参数和命名参数orElseIterable.map的第 0 个位置参数Iterable.reduce的第 0 个位置参数Iterable.singleWhere的第 0 个位置参数和命名参数orElseIterable.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