Restaurar el estado en Android
Cómo restaurar el estado de tu aplicación de Android después de que haya sido finalizada por el sistema operativo.
Cuando un usuario ejecuta una aplicación móvil y luego selecciona otra aplicación para ejecutar, la primera aplicación se mueve a segundo plano, o se envía a segundo plano. El sistema operativo (tanto iOS como Android) podría finalizar la aplicación en segundo plano para liberar memoria y mejorar el rendimiento de la aplicación que se ejecuta en primer plano.
Cuando el usuario vuelve a seleccionar la aplicación, llevándola de nuevo a primer plano, el SO la vuelve a iniciar. Pero, a menos que hayas configurado una forma de guardar el estado de la aplicación antes de que fuera finalizada, habrás perdido el estado y la aplicación se iniciará desde cero. El usuario habrá perdido la continuidad que espera, lo cual claramente no es ideal. (Imagina completar un formulario largo y ser interrumpido por una llamada telefónica antes de hacer clic en Enviar.)
Entonces, ¿cómo puedes restaurar el estado de la aplicación para que se vea como antes de ser enviada a segundo plano?
Flutter tiene una solución para esto con el
RestorationManager
(y clases relacionadas)
en la librería services.
Con el RestorationManager, el framework de Flutter
proporciona los datos de estado al motor a medida que el estado
cambia, de modo que la aplicación esté lista cuando el SO señale
que está a punto de finalizar la aplicación, dándole a la aplicación solo
unos momentos para prepararse.
Resumen
#Puedes habilitar la restauración de estado con solo unas pocas tareas:
-
Define un
restorationScopeIdpara clases comoCupertinoApp,MaterialAppoWidgetsApp. -
Define un
restorationIdpara widgets que lo soporten, comoTextFieldyScrollView. Esto habilita automáticamente la restauración de estado incorporada para esos widgets. -
Para widgets personalizados, debes decidir qué estado deseas restaurar y mantener ese estado en una
RestorableProperty. (La API de Flutter proporciona varias subclases para diferentes tipos de datos). Define esos widgetsRestorablePropertyen una claseStateque use elRestorationMixin. Registra esos widgets con el mixin en un métodorestoreState. -
Si usas alguna API de Navigator (como
push,pushNamed, etc.), migra a la API que tenga "restorable" en el nombre (restorablePush,restorablePushNamed, etc.) para restaurar la pila de navegación.
Otras consideraciones:
-
Proporcionar un
restorationScopeIdaMaterialApp,CupertinoAppoWidgetsApphabilita automáticamente la restauración de estado al inyectar unRootRestorationScope. Si necesitas restaurar el estado por encima de la clase de la aplicación, inyecta unRootRestorationScopemanualmente. -
La diferencia entre un
restorationIdy unrestorationScopeId: Los widgets que reciben unrestorationScopeIdcrean un nuevorestorationScope(un nuevoRestorationBucket) en el cual todos los hijos almacenan su estado. UnrestorationIdsignifica que el widget (y sus hijos) almacenan los datos en el bucket circundante.
Restaurar el estado de navegación
#Si deseas que tu aplicación regrese a una ruta particular que el usuario estaba viendo recientemente (el carrito de compras, por ejemplo), entonces también debes implementar la restauración de estado para la navegación.
Si usas la API de Navigator directamente,
migra los métodos estándar a métodos restorable
(que tienen "restorable" en el nombre).
Por ejemplo, reemplaza push con restorablePush.
Probar la restauración de estado
#Para probar la restauración de estado, configura tu dispositivo móvil para que
no guarde el estado una vez que la aplicación se envíe a segundo plano.
Para aprender cómo hacer esto tanto en iOS como en Android,
consulta Probar la restauración de estado
en la
página de RestorationManager.
Otros recursos
#Para obtener más información sobre la restauración de estado, consulta los siguientes recursos.
-
Para aprender más sobre el estado a corto plazo y a largo plazo, consulta Diferenciar entre estado efímero y estado de la aplicación.
-
Quizás quieras echar un vistazo a los paquetes en pub.dev que realizan la restauración de estado, como
statePersistence. -
Para obtener más información sobre navegación y el paquete
go_router, consulta Navegación y enrutamiento y el tema State restoration en pub.dev.
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.