The forgetChild() method must call super
Summary
#A recent global key duplication detection refactor now requires
Element
subclasses that override the forgetChild()
to call super()
.
Context
#When encountering a global key duplication that will be cleaned up by an element rebuild later, we must not report global key duplication. Our previous implementation threw an error as soon as duplication was detected, and didn't wait for the rebuild if the element with the duplicated global key would have rebuilt.
The new implementation keeps track of all global
key duplications during a build cycle, and only verifies global
key duplication at the end of the that cycle instead of
throwing an error immediately. As part of the refactoring,
we implemented a mechanism to remove previous global key
duplication in forgetChild
if the rebuild had happened.
This, however, requires all Element
subclasses that
override forgetChild
to call the super
method.
Description of change
#The forgetChild
of abstract class Element
has a base
implementation to remove global key reservation,
and it is enforced by the @mustCallSuper
meta tag.
All subclasses that override the method have to call super
;
otherwise, the analyzer shows a linting error and
global key duplication detection might throw an unexpected error.
Migration guide
#In the following example, an app's Element
subclass overrides the forgetChild
method.
Code before migration:
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
}
}
Code after migration:
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
super.forgetChild(child);
}
}
Timeline
#Landed in version: 1.16.3
In stable release: 1.17
References
#API documentation:
Relevant issues:
Relevant PRs:
除非另有说明,本文档之所提及适用于 Flutter 的最新稳定版本,本页面最后更新时间: 2024-10-09。 查看文档源码 或者 为本页面内容提出建议。