BLoC con Cubit en Flutter: ejercicio resuelto
BLoC con Cubit en Flutter: ejercicio resuelto
Cubit es la versión simplificada del patrón BLoC: gestiona estado emitiendo valores tipados sin necesidad de definir eventos explícitos. Es ideal para lógica de UI que no requiere historiales de eventos ni side effects complejos.
Enunciado
Implementa un contador con tres operaciones (incrementar, decrementar, reiniciar) usando Cubit. La UI debe reaccionar automáticamente a cada cambio de estado sin setState.
Dependencias
Solución en Flutter
Resultado esperado
- El contador arranca en 0.
- Cada botón dispara un método del cubit y la UI se reconstruye sola.
- No hay ni un
setStateen la pantalla.
Errores frecuentes
- Crear el cubit dentro del widget en lugar de proveerlo con
BlocProvider: el cubit se destruye y recrea con cada rebuild. - Usar
context.readdentro debuild(solo para callbacks); usarcontext.watchoBlocBuilderpara leer el estado. - Emitir el mismo valor cuando el estado es un primitivo: Cubit compara por igualdad y descarta duplicados, lo que puede confundir si el estado es un objeto mutable.
Cuándo usar Cubit vs BLoC
| Situación | Cubit | BLoC |
|---|---|---|
| Estado simple, pocas operaciones | ✅ | innecesario |
| Historial de eventos, logging | ❌ | ✅ |
| Side effects complejos por evento | ❌ | ✅ |
| Streams externos que alimentan estado | ❌ | ✅ |
Aplicación práctica
Cubit es el punto de entrada natural al ecosistema BLoC. Se usa en apps de producción para formularios, carrito de compra, filtros, preferencias de usuario y cualquier estado local de feature que no necesita trazabilidad de eventos.
Siguiente ejercicio recomendado
- BLoC con eventos y estados tipados en Flutter: ejercicio resuelto
- Inyección de dependencias con get_it en Flutter: ejercicio resuelto
- Provider en Flutter para estado global: 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
¿Cubit es oficial del equipo de flutter_bloc?
Sí. Cubit forma parte del paquete flutter_bloc de Felix Angelov y está documentado y mantenido oficialmente.
¿Puedo migrar de Cubit a BLoC sin reescribir la UI?
Sí. El widget BlocBuilder funciona igual con ambos. Solo cambia la clase que gestiona el estado.
¿Necesito BlocObserver desde el principio?
No es obligatorio, pero añadir un BlocObserver global en desarrollo para loguear transiciones de estado es una práctica muy recomendable.