forgetChild() 方法必须调用 super
概述
#最近的全局键重复检测重构要求覆盖 `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