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
除非另有說明,否則本網站上的文件反映 Dart 3.7.1 版本。頁面最後更新於 2025-03-07。 檢視原始碼 或回報問題。