Se agregó el método dispose() faltante para algunos objetos desechables en Flutter
'dispose()' podría fallar debido a una doble liberación.
Resumen
#Se han añadido las llamadas faltantes a 'dispose()' para algunos objetos desechables. Por ejemplo, ContextMenuController no liberaba OverlayEntry, y EditableTextState no liberaba TextSelectionOverlay.
Si algún otro código también invoca 'dispose()' para el objeto, y el objeto está protegido contra la doble liberación, el segundo 'dispose()' fallará con el siguiente mensaje de error:
Once you have called dispose() on a <class name>, it can no longer be used.
Contexto
#La convención es que el propietario de un objeto debe liberarlo (dispose).
Esta convención se rompió en algunos lugares:
los propietarios no estaban liberando los objetos desechables.
El problema se solucionó agregando una llamada a dispose().
Sin embargo, si el objeto está protegido contra la doble liberación,
esto puede causar fallos al ejecutarse en modo debug
y cuando se llama a dispose() en otra parte del objeto.
Guía de migración
#Si encuentras el siguiente error, actualiza tu código para
llamar a dispose() solo en los casos en que tu código haya creado el objeto.
Once you have called dispose() on a <class name>, it can no longer be used.
Código antes de la migración:
x.dispose();
Código después de la migración:
if (xIsCreatedByMe) {
x.dispose();
}
Para localizar la liberación incorrecta, comprueba la pila de llamadas (call stack) del error. Si la pila de llamadas apunta a dispose
en tu código, esta liberación es incorrecta y debería corregirse.
Si el error ocurre en el código de Flutter, dispose() fue
llamado incorrectamente la primera vez.
Puedes localizar la llamada incorrecta llamando temporalmente a print(StackTrace.current)
en el cuerpo del método dispose fallido.
Timeline
#Consulta el progreso y el estado en el issue de seguimiento.
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.