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の名前付きパラメータcleanupTimer.runの 0 番目の位置パラメータ
インスタンスメソッド
#dart:asyncからFuture.thenの 0 番目の位置パラメータFuture.completeの 0 番目の位置パラメータ
dart:collectionからQueue.removeWhereの 0 番目の位置パラメータ- `Queue.retain
Iterable.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代わりに linter ルールを構成するために YAML マップ構文を使用している場合は、linter > rules の下に null_closures: true を追加します
analysis_options.yaml
yaml
linter:
rules:
null_closures: true