Contenido del curso
Fundamentos de BLoC y Firebase
Navegación y Autenticación
- 10

BlocProvider y RepositoryProvider en Flutter
06:24 min - 11

Pantalla de login con BlocListener en Flutter
Viendo ahora - 12

Creación y Validación de Formularios en Flutter con Firebase
17:43 min - 13

Rutas en Flutter con GoRouter y Firebase Auth
15:46 min - 14

Conectar botón de login con Firebase Auth
11:34 min - 15

Cómo implementar logout con Firebase y GoRouter
10:30 min
Diseño Avanzado en iOS
Integración con Firestore usando BLoC
- 18

Modelo e repositório Firestore para BLoC
16:43 min - 19

Manejo de Estados y Eventos en Flutter con Bloc para Finanzas
09:57 min - 20

Agregar transacciones en Firebase con Flutter Bloc
06:41 min - 21

Eliminar Transacciones con Firebase en Flutter
05:29 min - 22

MultiBlocProvider con auth y transacciones en Flutter
06:06 min
Funcionalidades con BLoC
- 23

BlocBuilder para mostrar datos en Flutter
15:13 min - 24

Integración de Gráficas y Estados en Aplicaciones Flutter
11:50 min - 25

Creación de Listados Dinámicos en Aplicaciones Flutter
18:25 min - 26

Configuración de Balance y Estados en Pantalla de Wallet
07:12 min - 27

Lista de Transacciones en Aplicaciones Móviles
04:02 min - 28

Agregar Transacciones en Firebase con Flutter y Bloc
10:55 min - 29

Eliminar transacciones en Flutter con BLoC y Firebase
03:57 min
Testing
Pantalla de login con BlocListener en Flutter
Resumen
Construir una pantalla de inicio de sesión en Flutter con BLoC y Firebase te permite escuchar estados de autenticación en tiempo real y reaccionar a cada cambio: carga, éxito o error. Aquí aprenderás a estructurar el archivo login_screen.dart paso a paso, integrando un BlocListener que orqueste la experiencia del usuario.
¿Cómo se estructura el archivo login_screen.dart?
La pantalla parte como un StatelessWidget llamado LoginScreen, ya que el manejo de estado lo delegas al bloc. Dentro del método build retornas un Scaffold con dos piezas claves: el AppBar y el body.
El AppBar lleva un título constante con el texto Iniciar sesión, mientras que el body se construye sobre un BlocListener que escucha cambios del AuthBloc.
¿Por qué usar StatelessWidget si hay estados? Porque el estado vive dentro del bloc, no del widget. La pantalla solo reacciona a lo que el
AuthBlocemite, lo que mantiene la UI desacoplada de la lógica.
¿Qué es un BlocListener y cómo se usa en autenticación?
Un BlocListener es un widget que escucha estados emitidos por un bloc sin reconstruir la UI cada vez que cambian. Es ideal para disparar efectos secundarios como diálogos, navegación o mensajes de error.
Para la pantalla de login necesitas dos tipos: AuthBloc como controlador y AuthState como tipo de estado escuchado. Dentro del listener recibes el context y el state, y desde ahí decides qué mostrar según la respuesta.
¿Qué hace el listener en un login? Reacciona a cada estado del bloc: si está cargando muestra un indicador, si autentica navega al dashboard, y si falla despliega un mensaje de error.
¿Cómo manejar los estados de carga, éxito y error?
La lógica del listener cubre tres escenarios que cualquier flujo de autenticación necesita resolver con claridad.
Estado de envío: mostrar progreso al usuario
Cuando el state indica que la petición se está enviando, abres un showDialog con un Center que contiene un CircularProgressIndicator. Esto le comunica al usuario que su solicitud está en proceso y evita que vuelva a presionar el botón.
El builder del diálogo recibe el contexto y devuelve el indicador centrado, manteniendo la pantalla bloqueada mientras Firebase responde.
Estado autenticado: navegar al dashboard
Si la respuesta confirma que el usuario está autenticado, primero cierras el diálogo de carga con Navigator.pop(context) y luego rediriges con Navigator.push hacia la ruta del dashboard.
El orden importa: cerrar el showDialog antes de navegar evita que el indicador quede flotando sobre la nueva pantalla. Más adelante, cuando configures el MainScreen y el route router, esta navegación apuntará directo al home de la aplicación.
Estado de error: mostrar feedback con SnackBar
Cuando el state trae un errorMessage distinto de null, ejecutas dos acciones: cierras el diálogo de carga con Navigator.pop y muestras un SnackBar mediante ScaffoldMessenger.of(context).
Dentro del SnackBar colocas un Text que despliega el mensaje capturado. Así el usuario ve, en una barra inferior breve, exactamente qué salió mal sin perder el contexto de la pantalla.
¿Cómo se conecta el formulario al BlocListener?
Después de definir el listener, agregas un child que contiene el contenido visible. Lo envuelves en un Padding con espaciado uniforme de 16 píxeles en todos los lados para que el formulario respire.
Dentro de ese Padding colocas un widget llamado LoginForm, que construirás como un componente aparte. La pantalla queda así:
ScaffoldconAppBartitulado Iniciar sesión.BlocListener<AuthBloc, AuthState>escuchando estados.Paddingde 16 px envolviendo el contenido.LoginFormcomo widget hijo con los campos de entrada.
Con esta estructura, tu pantalla de login queda constantemente escuchando las funcionalidades del bloc y del repositorio. Los showDialog, la navegación y el SnackBar acompañan cada paso del proceso de autenticación, dándole al usuario retroalimentación inmediata.
¿Ya tienes claro cómo armar el LoginForm con email y contraseña? Cuéntame en los comentarios qué parte del flujo te genera más dudas.