概述

#

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

背景

#

当遇到稍后将通过元素重建清理的全局键重复时,我们不得报告全局键重复。我们之前的实现在检测到重复时立即抛出错误,如果带有重复全局键的元素会重建,它也不会等待重建完成。

新实现在构建周期中跟踪所有全局键重复,并且只在该周期结束时验证全局键重复,而不是立即抛出错误。作为重构的一部分,我们实现了一种机制,以便在重建发生时在 `forgetChild` 中移除先前的全局键重复。然而,这要求所有覆盖 `forgetChild` 的 `Element` 子类调用 `super` 方法。

变更说明

#

抽象类 `Element` 的 `forgetChild` 方法有一个移除全局键保留的基本实现,并且由 `@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