En Flutter, las rutas permiten la navegación entre pantallas dentro de tu aplicación. A veces, necesitas pasar datos de una pantalla a otra, ya sea a través de parámetros opcionales en la URL o mediante argumentos que se pasan directamente al momento de la navegación.
Paso 1: Configuración Inicial
Antes de empezar, asegúrate de tener una aplicación Flutter básica configurada. Si no tienes una, puedes crear una nueva usando el siguiente comando:
flutter create rutas_flutter
Abre tu proyecto en tu editor de código favorito (por ejemplo, Visual Studio Code).
Paso 2: Definiendo las Rutas en MaterialApp
Dentro del widget MaterialApp
, puedes definir rutas estáticas usando la propiedad routes
, o dinámicas y más flexibles utilizando onGenerateRoute
. En este tutorial, usaremos onGenerateRoute
para manejar rutas con parámetros opcionales y argumentos.
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Tutorial Rutas con Parámetros', debugShowCheckedModeBanner: false, initialRoute: '/home', onGenerateRoute: (settings) { final uri = Uri.parse(settings.name ?? ''); switch (uri.path) { case '/home': return MaterialPageRoute(builder: (context) => HomeScreen()); case '/details': // Ejemplo de argumentos final arguments = settings.arguments as Map<String, dynamic>?; final id = arguments?['id'] as int?; // Ejemplo de parámetro de consulta final name = uri.queryParameters['name']; return MaterialPageRoute( builder: (context) => DetailScreen( id: id, name: name, ), ); default: return MaterialPageRoute(builder: (context) => NotFoundScreen()); } }, ); } }
Paso 3: Creando las Pantallas
Vamos a crear tres pantallas simples: HomeScreen
, DetailScreen
y NotFoundScreen
.
class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Home Screen'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( onPressed: () { // Navegando con argumentos Navigator.pushNamed( context, '/details', arguments: {'id': 42}, ); }, child: Text('Ir a Detalles con ID 42'), ), ElevatedButton( onPressed: () { // Navegando con parámetro de consulta Navigator.pushNamed(context, '/details?name=Flutter'); }, child: Text('Ir a Detalles con nombre Flutter'), ), ], ), ), ); } } class DetailScreen extends StatelessWidget { final int? id; final String? name; const DetailScreen({Key? key, this.id, this.name}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Detail Screen'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('ID: ${id ?? 'No proporcionado'}'), Text('Nombre: ${name ?? 'No proporcionado'}'), ], ), ), ); } } class NotFoundScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('404 - Página no encontrada'), ), body: Center( child: Text('La ruta no existe.'), ), ); } }
Paso 4: Navegación y Manejo de Parámetros
Navegación con Argumentos
En HomeScreen
, hemos añadido un botón que navega a la pantalla de detalles pasando un argumento id
.
ElevatedButton( onPressed: () { // Navegando con argumentos Navigator.pushNamed( context, '/details', arguments: {'id': 42}, ); }, child: Text('Ir a Detalles con ID 42'), ),
En onGenerateRoute
, extraemos los argumentos usando settings.arguments
:
final arguments = settings.arguments as Map<String, dynamic>?; final id = arguments?['id'] as int?;
Navegación con Parámetros de Consulta
Otro botón en HomeScreen
navega a la pantalla de detalles utilizando un parámetro de consulta name
:
ElevatedButton( onPressed: () { // Navegando con parámetro de consulta Navigator.pushNamed(context, '/details?name=Flutter'); }, child: Text('Ir a Detalles con nombre Flutter'), ),
En onGenerateRoute
, extraemos este parámetro usando Uri.parse
:
final name = uri.queryParameters['name'];
Paso 5: Ejecuta la Aplicación
Guarda todos los archivos y ejecuta la aplicación:
flutter run
Deberías poder navegar entre la pantalla de inicio y la pantalla de detalles, viendo los diferentes métodos de pasar y recibir datos.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.