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代わりに linter ルールを構成するために YAML マップ構文を使用している場合は、linter > rules の下に null_closures: true を追加します
analysis_options.yaml
yaml
linter:
  rules:
    null_closures: true