Navegación y transferencia de datos entre pantallas en Flutter
Clase 12 de 26 • Curso de Flutter
Resumen
Las aplicaciones modernas suelen requerir múltiples pantallas para organizar sus funcionalidades de manera eficiente. Aquí exploraremos cómo crear una nueva pantalla en Flutter, navegar entre ellas y pasar datos de una a otra, logrando una experiencia de usuario dinámica.
¿Cómo se crea una nueva pantalla en Flutter?
- Crea un archivo para la nueva pantalla, por ejemplo,
recipe_detail.dart
. - Define un
StatefulWidget
llamadoRecipeDetail
para mantener el estado de la pantalla. - Importa el paquete
material.dart
para acceder a las herramientas de diseño de Flutter. - Usa un
Scaffold
para estructurar la página:- Incluye una
AppBar
con un botón que permita regresar a la pantalla anterior. - Agrega un ícono, como
Icons.arrow_back
, configurado con un color contrastante para destacarlo.
- Incluye una
Código clave:
AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.white),
onPressed: () => Navigator.pop(context),
),
backgroundColor: Colors.orange,
title: Text('Detalle de Receta'),
)
¿Cómo se navega desde la pantalla principal a la nueva pantalla?
- Usa un
GestureDetector
para capturar eventos de clic en elementos como tarjetas o botones. - Implementa la función
Navigator.push()
para redirigir al usuario:- Define un
MaterialPageRoute
que apunta a la nueva pantalla. - Asegúrate de importar el archivo correspondiente.
- Define un
Código clave:
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => RecipeDetail(recipeName: 'Lasaña')),
);
},
child: Card(
child: Text('Ver detalle'),
),
)
¿Cómo se pasa información entre pantallas?
- Define un constructor en la nueva pantalla para recibir datos, como el nombre de una receta.
- Usa el modificador
final
para garantizar que los datos sean inmutables. - Muestra la información recibida en un widget, como un
Text
.
Código clave:
class RecipeDetail extends StatelessWidget {
final String recipeName;
const RecipeDetail({Key? key, required this.recipeName}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(recipeName),
backgroundColor: Colors.orange,
),
body: Center(
child: Text('Receta: $recipeName'),
),
);
}
}
¿Cómo asegurar la navegación inversa?
- Implementa el método
Navigator.pop(context)
en el botón de regreso. - Flutter maneja automáticamente el historial de navegación, asegurando que el usuario pueda regresar sin complicaciones.
¿Qué podemos lograr con esta funcionalidad?
- Crear pantallas dinámicas que presenten detalles específicos basados en datos enviados desde la pantalla principal.
- Facilitar una navegación fluida entre secciones de la aplicación, mejorando la usabilidad.