Hero animations en Flutter: ejercicio resuelto
Hero animations en Flutter: ejercicio resuelto
El widget Hero crea una transición visual continua de un elemento entre dos rutas. Flutter anima automáticamente la posición, tamaño y forma del widget de origen al destino — sin una sola línea de código de animación. Es la técnica más impactante para conectar pantallas con un elemento visual compartido.
Enunciado
Implementa una galería de imágenes donde:
- Las miniaturas de la lista tienen un
Herocon etiqueta única. - Al pulsar una miniatura, la imagen se anima hacia la pantalla de detalle.
- Al volver, la imagen regresa a su posición original.
- El detalle incluye el título animado con
Herode texto.
Dependencias
Solo Flutter SDK.
Solución completa
Cómo funciona internamente
- Flutter identifica los pares de
Herocon la mismatagen la ruta de origen y la de destino. - Crea una capa de overlay temporal y “vuela” el widget desde el
Rectde origen al de destino durante la transición. - Al completar, el widget ocupa su posición final en el árbol de destino.
Personalizar el vuelo con flightShuttleBuilder
Úsalo para mostrar una versión diferente del widget durante el vuelo (por ejemplo, la versión en alta resolución).
Errores frecuentes
- Tags duplicados en la misma ruta: dos
Herocon la mismatagen la misma pantalla lanzanFlutterError: There are multiple heroes that share the same tag. Las tags deben ser únicas por ruta. Textcon Hero sinMaterial: el texto hereda el estilo de la pantalla de origen durante el vuelo, lo que produce texto blanco/negro inesperado. Envuelve elTextenMaterial(color: Colors.transparent).- Hero dentro de
Opacitycon value 0: el widget de origen debe ser visible para que el vuelo funcione. Si lo ocultas conOpacity(opacity: 0), usaVisibilityo elimínalo directamente.
Hero en navegación con go_router
Aplicación práctica
Hero animations se usan en galerías de imágenes, tarjetas de producto que se expanden al toque, avatares de usuario que crecen al ver el perfil y cualquier elemento compartido que conecta dos pantallas visualmente.
Siguiente ejercicio recomendado
- Animaciones implícitas en Flutter: ejercicio resuelto
- go_router con guards en Flutter: ejercicio resuelto
- CustomPainter en Flutter: ejercicio resuelto
- Todos los ejercicios de Flutter
Práctica guiada y siguiente paso
- Más ejercicios de Flutter
- Ejercicios C para reforzar fundamentos
- Programación en C en 100 ejercicios resueltos
- Ver el libro en Amazon (incluido en Kindle Unlimited)
- Suscribirte a la newsletter
FAQ
¿Hero funciona con go_router?
Sí, siempre que las rutas compartan el mismo Navigator. En go_router con ShellRoute o rutas anidadas, asegúrate de que ambas páginas estén bajo el mismo nivel de Navigator.
¿Puedo animar varios elementos Hero a la vez en la misma transición?
Sí. Puedes tener tantos pares de Hero como quieras en la misma transición de ruta. Cada uno “vuela” de forma independiente.
¿El Hero funciona con showDialog o showModalBottomSheet?
No directamente — estos métodos crean un Navigator secundario. Para animaciones de tipo Hero en dialogs, usa un overlay personalizado o una transición de página completa con PageRouteBuilder.