跳至主內容

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 的命名引數 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 檔案中的 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