avoid_futureor_void
避免將 'FutureOr
詳情
#避免將 FutureOr<void> 用作結果的型別。這種型別存在問題,因為它可能看似表示結果要麼是 Future<void>,要麼結果應該被丟棄(當它是 void 時)。然而,無法安全地檢測我們擁有哪種情況(因為 void 型別的表示式可以評估為任何物件,包括任何型別的 future)。
從概念上講,擁有一個意義類似於“忽略此物件;另外,看一眼它,因為它可能是 Future”的型別也是不健全的。
對於型別 FutureOr<void> 的逆變出現(例如,作為形參的型別),有一個例外,並且不會對這些出現發出警告。此例外的原因是該型別不描述結果,它描述了對他人提供的值的約束。類似地,對於類型別名宣告也有例外,因為它們很可能在逆變位置使用(例如,作為形參的型別)。因此,在類型別名宣告中,僅檢查型別引數邊界。
一個經常有用的 FutureOr<void> 型別的替代方案是 Future<void>?。這種型別表示結果要麼是 Future<void>,要麼是 null,並且在執行時沒有歧義,因為沒有物件可以同時擁有這兩種型別。
並非總是可以使用 Future<void>? 型別來替代 FutureOr<void> 型別,因為後者是所有型別的超型別,而前者不是。在這種情況下,將 FutureOr<void> 替換為 void 型別可能是一個有用的補救措施。
不好
FutureOr<void> m() {...}好
Future<void>? m() {...}此規則是實驗性的。 正在評估中,可能會更改或刪除。歡迎提供對其行為的反饋!主要問題在此:https://github.com/dart-lang/sdk/issues/59232。
啟用
#要啟用 avoid_futureor_void 規則,請在您的 analysis_options.yaml 檔案中,在 linter > rules 下新增 avoid_futureor_void
linter:
rules:
- avoid_futureor_void如果您改用 YAML 對映語法配置 Linter 規則,請在 linter > rules 下新增 avoid_futureor_void: true
linter:
rules:
avoid_futureor_void: true