forgetChild() 方法必須呼叫 super
概述
#最近一次全域性 Key 複製檢測重構現在要求重寫 forgetChild() 方法的 Element 子類呼叫 super()。
背景
#當遇到將被後續 Element 重建清理的全域性 Key 複製時,我們不能報告全域性 Key 複製。我們之前的實現會在檢測到複製時立即丟擲錯誤,而不會等待重建(如果具有複製全域性 Key 的 Element 會被重建)。
新實現會在構建週期內跟蹤所有全域性 Key 複製,並在該週期結束後僅驗證全域性 Key 複製,而不是立即丟擲錯誤。作為重構的一部分,我們在 forgetChild 中實現了一個機制,如果發生重建,則移除之前的全域性 Key 複製。然而,這要求所有重寫 forgetChild 的 Element 子類呼叫 super 方法。
變更說明
#抽象類 Element 的 forgetChild 方法有一個基礎實現,用於移除全域性 Key 預留,並且它由 @mustCallSuper 元標籤強制執行。所有重寫該方法的子類都必須呼叫 super;否則,分析器會顯示一個 linting 錯誤,並且全域性 Key 複製檢測可能會丟擲意外錯誤。
遷移指南
#在下面的示例中,應用程式的 Element 子類重寫了 forgetChild 方法。
遷移前的程式碼
dart
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
}
}遷移後的程式碼
dart
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
super.forgetChild(child);
}
}時間線
#釋出版本: 1.16.3
穩定版本: 1.17
參考資料
#API 文件
相關問題
相關 PR