avoid_futureor_void
避免使用 'FutureOr
此規則目前為實驗性,且自 Dart 3.6 起提供。
詳細資訊
#避免使用 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/linter/issues/4622
用法
#若要啟用 avoid_futureor_void
規則,請在您的 analysis_options.yaml
檔案中的 linter > rules 下新增 avoid_futureor_void
linter:
rules:
- avoid_futureor_void
除非另有說明,否則本網站上的文件反映 Dart 3.6.0。頁面上次更新於 2024-07-03。 檢視來源 或 回報問題。