go_router en Flutter: ejercicio resuelto de navegación

go_router en Flutter: ejercicio resuelto

Si estás buscando go_router Flutter ejemplo, este ejercicio te muestra una navegación declarativa moderna para proyectos reales.

Enunciado

Crea dos pantallas:

  • Home,
  • Detalle con parámetro.

Navega usando go_router y rutas por nombre.

Solución en Flutter

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

void main() => runApp(const MyApp());

final _router = GoRouter(
  routes: [
    GoRoute(
      path: '/',
      name: 'home',
      builder: (_, __) => const HomePage(),
    ),
    GoRoute(
      path: '/detail/:id',
      name: 'detail',
      builder: (_, state) => DetailPage(id: state.pathParameters['id']!),
    ),
  ],
);

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(routerConfig: _router);
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Home')),
      body: Center(
        child: ElevatedButton(
          onPressed: () => context.goNamed('detail', pathParameters: {'id': '42'}),
          child: const Text('Ir al detalle'),
        ),
      ),
    );
  }
}

class DetailPage extends StatelessWidget {
  final String id;
  const DetailPage({super.key, required this.id});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Detalle')),
      body: Center(child: Text('ID recibido: $id')),
    );
  }
}

Resultado esperado

Al pulsar el botón desde Home, navegas a detalle y ves el parámetro id.

Errores frecuentes

  • Definir rutas sin name y perder navegación semántica.
  • Mezclar Navigator.push y go_router sin criterio.
  • No validar parámetros cuando pueden venir vacíos.

Aplicación práctica

go_router se usa en apps con múltiples flujos y enlaces profundos.

Siguiente ejercicio recomendado

Práctica guiada y siguiente paso

FAQ

¿go_router sustituye a named routes clásicas?

En muchos proyectos sí, porque simplifica rutas declarativas y deep links.

¿Es complicado migrar desde Navigator 1.0?

No necesariamente. Puedes migrar flujo por flujo.

¿Cuándo merece la pena usar go_router?

Cuando la app tiene varias rutas, autenticación y navegación compleja.