跳至主要內容

forgetChild() 方法必須呼叫 super

摘要

#

最近進行的全域鍵重複偵測重構現在要求覆寫 forgetChild()Element 子類別呼叫 super()

背景

#

當遇到全域鍵重複,之後會透過元件重建清除時,我們不應回報全域鍵重複。我們先前的實作在偵測到重複時立即拋出錯誤,並且如果具有重複全域鍵的元件會被重建,則不會等待重建。

新的實作會在建置週期中追蹤所有全域鍵重複,並且僅在該週期結束時驗證全域鍵重複,而不是立即拋出錯誤。作為重構的一部分,我們實作了一種機制,可以在發生重建時移除 forgetChild 中的先前全域鍵重複。但是,這要求所有覆寫 forgetChildElement 子類別呼叫 super 方法。

變更說明

#

抽象類別 ElementforgetChild 具有移除全域鍵保留的基本實作,並且透過 @mustCallSuper 元標籤強制執行。所有覆寫此方法的子類別都必須呼叫 super;否則,分析器會顯示 lint 錯誤,並且全域鍵重複偵測可能會拋出意外錯誤。

遷移指南

#

在以下範例中,應用程式的 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