avoid_futureor_void
不要使用 'FutureOr
描述
#當型別 FutureOr<void> 被用作結果的型別(確切地說:它被用在非逆變的位置)時,分析器會產生此診斷。FutureOr<void> 型別是有問題的,因為它可能看起來表示結果要麼是 Future<void>,要麼結果應該被丟棄(當它是 void 時)。然而,沒有安全的方法可以檢測我們是屬於哪種情況,因為 void 型別的表示式可以評估為任何物件,包括任何型別的 future。
從概念上講,擁有一個型別,其含義類似於“忽略此物件;另外,看一眼,因為它可能是 future”也是不健全的。
對於型別 FutureOr<void> 的逆變用法(例如,作為形式引數的型別),則例外處理,不會為此類用法發出警告。此例外的原因是該型別不描述結果,而是描述對他人提供的值的約束。類似地,類型別名宣告也例外處理,因為它們很可能被用在逆變位置(例如,作為形式引數的型別)。因此,在類型別名宣告中,僅檢查型別引數的邊界。
示例
#dart
import 'dart:async';
FutureOr<void> m() => null;常見修復方法
#FutureOr<void> 型別的一個常用替代方案是 Future<void>?。此型別表示結果要麼是 Future<void>,要麼是 null,並且在執行時沒有歧義,因為沒有物件可以同時具有這兩種型別。
將 Future<void>? 型別用作 FutureOr<void> 型別的替代方案並非總是可能,因為後者是所有型別的超型別,而前者不是。在這種情況下,將 FutureOr<void> 替換為 void 型別可能是一個有用的補救措施。