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
11:12 min - 12

Creación y Validación de Formularios en Flutter con Firebase
Viendo ahora - 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
Creación y Validación de Formularios en Flutter con Firebase
Resumen
La creación de formularios en Flutter es una habilidad esencial para cualquier desarrollador que busque construir aplicaciones interactivas y funcionales. En este contenido, exploraremos cómo implementar un formulario de inicio de sesión con validaciones robustas, utilizando Firebase para la autenticación y siguiendo las mejores prácticas de desarrollo en Flutter.
¿Cómo crear un formulario de inicio de sesión en Flutter?
Para crear un formulario de inicio de sesión efectivo en Flutter, necesitamos implementar un StatefulWidget que nos permita manejar los diferentes estados del formulario. Comenzaremos configurando la estructura básica y luego añadiremos las validaciones necesarias para garantizar que los datos ingresados sean correctos.
Configuración inicial del formulario
Lo primero que debemos hacer es crear nuestro StatefulWidget y configurar los controladores necesarios para manejar los campos del formulario:
class LoginForm extends StatefulWidget { _LoginFormState createState() => _LoginFormState(); } class _LoginFormState extends State<LoginForm> { // Controlador del formulario final formKey = GlobalKey<FormState>(); // Controladores para los campos TextEditingController _emailController = TextEditingController(); TextEditingController _passwordController = TextEditingController(); // Instancia de Firebase Auth final FirebaseAuth _auth = FirebaseAuth.instance; Widget build(BuildContext context) { return Form( key: formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Aquí irán nuestros campos ], ), ); } }
Es fundamental inicializar correctamente los controladores para cada campo del formulario, ya que estos nos permitirán acceder a los valores ingresados por el usuario y manipularlos según sea necesario.
Creación de campos personalizados
Para mantener nuestro código organizado y reutilizable, crearemos widgets personalizados para los campos de correo electrónico y contraseña:
class EmailField extends StatelessWidget { final TextEditingController controller; const EmailField({ required this.controller, }); Widget build(BuildContext context) { return TextFormField( controller: controller, decoration: InputDecoration( labelText: "Correo", prefixIcon: Icon(Icons.email), ), keyboardType: TextInputType.emailAddress, validator: Validators.validateEmail, ); } } class PasswordField extends StatelessWidget { final TextEditingController controller; const PasswordField({ required this.controller, }); Widget build(BuildContext context) { return TextFormField( controller: controller, decoration: InputDecoration( labelText: "Contraseña", prefixIcon: Icon(Icons.lock), ), obscureText: true, validator: Validators.validatePassword, ); } }
Estos widgets personalizados nos permiten encapsular la lógica de cada campo y reutilizarlos en diferentes partes de nuestra aplicación si fuera necesario.
Implementación de validaciones robustas
Las validaciones son cruciales para garantizar que los datos ingresados por el usuario cumplan con los requisitos necesarios. Crearemos una clase de utilidad para manejar estas validaciones:
class Validators { static String? validateEmail(String? value) { if (value == null || value.isEmpty) { return "Por favor, ingrese el correo"; } // Expresión regular para validar formato de email if (!RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(value)) { return "Por favor, ingrese un correo válido"; } return null; } static String? validatePassword(String? value) { if (value == null || value.isEmpty) { return "Por favor, ingrese su contraseña"; } if (value.length < 6) { return "La contraseña debe tener al menos 6 caracteres"; } return null; } }
Estas validaciones nos ayudan a:
- Verificar que los campos no estén vacíos
- Comprobar que el correo tenga un formato válido
- Asegurar que la contraseña cumpla con los requisitos mínimos de seguridad
Ensamblando el formulario completo
Ahora que tenemos todos los componentes necesarios, podemos ensamblar nuestro formulario completo:
Widget build(BuildContext context) { return Form( key: formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ EmailField(controller: _emailController), SizedBox(height: 16), PasswordField(controller: _passwordController), SizedBox(height: 24), ElevatedButton( onPressed: () { // Aquí irá la lógica de inicio de sesión }, child: Text("Iniciar sesión"), ), ], ), ); }
Este formulario incluye:
- Campo de correo electrónico con validación
- Campo de contraseña con validación
- Espaciado adecuado entre elementos
- Botón de inicio de sesión
¿Cómo implementar la autenticación con Firebase?
La autenticación es un aspecto crítico de cualquier aplicación que requiera que los usuarios inicien sesión. Firebase proporciona una solución robusta y fácil de implementar para la autenticación de usuarios.
Configuración de Firebase Auth
Ya hemos inicializado Firebase Auth en nuestro widget:
final FirebaseAuth _auth = FirebaseAuth.instance;
Esta instancia nos permitirá acceder a todos los métodos de autenticación que ofrece Firebase, como inicio de sesión con correo y contraseña, autenticación con proveedores sociales, entre otros.
Implementación de la función de inicio de sesión
Para completar nuestro formulario, necesitamos implementar la función que se ejecutará cuando el usuario presione el botón de inicio de sesión:
Future<void> _signIn() async { if (formKey.currentState!.validate()) { try { await _auth.signInWithEmailAndPassword( email: _emailController.text.trim(), password: _passwordController.text, ); // Navegar a la siguiente pantalla si el inicio de sesión es exitoso } catch (e) { // Mostrar mensaje de error } } }
Esta función:
- Valida el formulario utilizando las validaciones que definimos anteriormente
- Intenta iniciar sesión con Firebase utilizando el correo y la contraseña proporcionados
- Maneja los errores que puedan ocurrir durante el proceso
Luego, conectamos esta función al botón de inicio de sesión:
ElevatedButton( onPressed: _signIn, child: Text("Iniciar sesión"), ),
La implementación de formularios con validaciones en Flutter es un proceso estructurado que requiere atención a los detalles. Siguiendo las prácticas descritas, podrás crear formularios robustos y seguros para tus aplicaciones. ¿Has implementado formularios en tus proyectos de Flutter? Comparte tu experiencia en los comentarios.