跳至主要内容

forgetChild() 方法必须调用 super

摘要

#

最近的全局键重复检测重构现在要求覆盖 forgetChild()Element 子类调用 super()

上下文

#

当遇到将在稍后由元素重建清理的全局键重复时,我们必须不报告全局键重复。我们之前的实现一旦检测到重复就会抛出错误,并且如果具有重复全局键的元素将要重建,则不会等待重建。

新实现会在构建周期内跟踪所有全局键重复,并且仅在该周期的结束时验证全局键重复,而不是立即抛出错误。作为重构的一部分,我们实现了一种机制,如果发生了重建,则在 forgetChild 中删除以前的全局键重复。但是,这要求覆盖 forgetChild 的所有 Element 子类都调用 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