El método forgetChild() debe llamar a super
Cualquier subclase de Element que sobrescriba forgetChild debe llamar a super.
Resumen
#Una refactorización reciente de la detección de duplicación de claves globales ahora requiere que las subclases
de Element que sobrescriban forgetChild() llamen a
super().
Contexto
#Al encontrar una duplicación de clave global que se limpiará mediante la reconstrucción de un elemento más adelante, no debemos informar la duplicación de clave global. Nuestra implementación anterior lanzaba un error tan pronto como se detectaba la duplicación, y no esperaba a la reconstrucción si el elemento con la clave global duplicada se hubiera reconstruido.
La nueva implementación realiza un seguimiento de todas las duplicaciones de claves globales
durante un ciclo de compilación (build cycle), y solo verifica la duplicación de claves
globales al final de ese ciclo en lugar de
lanzar un error de inmediato. Como parte de la refactorización,
implementamos un mecanismo para eliminar la duplicación de clave global anterior
en forgetChild si la reconstrucción había ocurrido.
Esto, sin embargo, requiere que todas las subclases de Element que
sobrescriban forgetChild llamen al método super.
Descripción del cambio
#El método forgetChild de la clase abstracta Element tiene una implementación
base para eliminar la reserva de clave global,
y esto se hace cumplir mediante la meta-etiqueta @mustCallSuper.
Todas las subclases que sobrescriban el método tienen que llamar a super;
de lo contrario, el analizador muestra un error de linting y
la detección de duplicación de clave global podría lanzar un error inesperado.
Guía de migración
#En el siguiente ejemplo, una subclase Element de una aplicación
sobrescribe el método forgetChild.
Código antes de la migración:
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
}
}
Código después de la migración:
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
super.forgetChild(child);
}
}
Timeline
#Lanzado en la versión: 1.16.3
En versión estable: 1.17
Referencias
#Documentación de la API:
Issues relevantes:
PRs relevantes:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.