BottomNavigationBar en Flutter: ejercicio resuelto
Si buscas BottomNavigationBar en Flutter, este ejemplo usa IndexedStack para mantener estado en cada pestaña.
Enunciado
Crea tres pestañas (Inicio, Buscar, Perfil) y conserva contenido al cambiar de tab.
Solución en Flutter
import 'package:flutter/material.dart';
void main() => runApp(const MaterialApp(home: TabsPage()));
class TabsPage extends StatefulWidget {
const TabsPage({super.key});
@override
State<TabsPage> createState() => _TabsPageState();
}
class _TabsPageState extends State<TabsPage> {
int index = 0;
final pages = const [
Center(child: Text('Inicio')),
Center(child: Text('Buscar')),
Center(child: Text('Perfil')),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('BottomNavigationBar')),
body: IndexedStack(index: index, children: pages),
bottomNavigationBar: BottomNavigationBar(
currentIndex: index,
onTap: (i) => setState(() => index = i),
items: const [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Inicio'),
BottomNavigationBarItem(icon: Icon(Icons.search), label: 'Buscar'),
BottomNavigationBarItem(icon: Icon(Icons.person), label: 'Perfil'),
],
),
);
}
}Resultado esperado
El cambio de pestañas es rápido y cada tab conserva su estado.
Errores frecuentes
- Usar
body = pages[index]y perder estado en tabs. - No sincronizar
currentIndex. - Mezclar navegación de tabs con push/pop sin estrategia.
Aplicación práctica
Se usa en apps de e-commerce, banca, medios y herramientas internas con módulos claros.
Siguiente ejercicio recomendado
- Navegación con named routes en Flutter: ejercicio resuelto
- go_router en Flutter: ejercicio resuelto de navegación
- Contador en Flutter con setState: ejercicio resuelto paso a paso
- Todos los ejercicios 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
¿Cómo mantener estado entre tabs en Flutter?
Usando IndexedStack, AutomaticKeepAliveClientMixin o soluciones de estado global.
¿BottomNavigationBar sigue siendo buena opción?
Sí, para navegación principal en apps con 3 a 5 secciones clave.
¿Qué alternativa hay para más de 5 secciones?
Combinar tabs con drawer o usar navegación jerarquica por módulo.