概述

#

最近一次全域性 Key 複製檢測重構現在要求重寫 forgetChild() 方法的 Element 子類呼叫 super()

背景

#

當遇到將被後續 Element 重建清理的全域性 Key 複製時,我們不能報告全域性 Key 複製。我們之前的實現會在檢測到複製時立即丟擲錯誤,而不會等待重建(如果具有複製全域性 Key 的 Element 會被重建)。

新實現會在構建週期內跟蹤所有全域性 Key 複製,並在該週期結束後僅驗證全域性 Key 複製,而不是立即丟擲錯誤。作為重構的一部分,我們在 forgetChild 中實現了一個機制,如果發生重建,則移除之前的全域性 Key 複製。然而,這要求所有重寫 forgetChildElement 子類呼叫 super 方法。

變更說明

#

抽象類 ElementforgetChild 方法有一個基礎實現,用於移除全域性 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