Introducción a Flutter y Dart

1

Desarrollo de Apps Multiplataforma con Flower de Google

2

Configuración de Flutter y Dart para Desarrollo de Apps Multiplataforma

3

Despliegue y Estructura Básica de una App con Flutter

4

Programación en Dart: Variables, Funciones y Clases Básicas

Widgets en Flutter

5

Creación de Widgets Stateless en Flutter para Recetario Interactivo

6

Widgets Esenciales en Flutter: Container, Row, Column y Text

7

Estructuración y Navegación de Pantallas en Flutter

8

Creación y Personalización de Widgets en Flutter

Manejo de Recursos y Formularios

9

Configuración de Imágenes en Flutter: Uso de Carpeta Assets

10

Creación de Formularios y Botones Interactivos en Aplicaciones

11

Controladores y Validación de Formularios en Flutter

Navegación y APIs

12

Navegación y transferencia de datos entre pantallas en Flutter

13

Conexión de Flutter a una API externa usando Mocon y HTTP

14

Consumo de APIs con Flutter y biblioteca HTTP

Gestión de Estados

15

Implementación de ListView con FutureBuilder para APIs en Flutter

16

Manejo de Errores y Cargas en Aplicaciones con API

17

Creación de modelos de datos en Flutter con Dart

18

Uso de Provider para Gestión de Estado en Flutter

19

"Gestión de Favoritos en Aplicaciones con Stateful Widgets"

20

Detalles de Recetas en Flutter: Implementación y Visualización

Experiencia de Usuario

21

Flujo completo de aplicación: recetas y funcionalidad de favoritos

22

Animaciones Personalizadas en Aplicaciones: Creación y Configuración

23

Internacionalización y Accesibilidad en Aplicaciones Flutter

Publicación de Apps

24

Configuración y creación de APK para aplicaciones Android con Flutter

25

Creación de Cuenta de Desarrollador en Google Play Console

26

Crear y Subir App Bundle en Google Play Store

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Flutter

Curso de Flutter

Alison Jimenez

Alison Jimenez

Controladores y Validación de Formularios en Flutter

11/26
Recursos

Crear formularios interactivos y validados es esencial para capturar información de manera efectiva. En este contenido, exploraremos cómo implementar campos personalizados, controladores y validaciones en un formulario utilizando Flutter, optimizando así la experiencia del usuario.

¿Cómo añadir campos personalizados al formulario?

  • Los campos requeridos son: nombre, autor, URL de imagen y descripción de la receta.
  • Para cada campo, se utiliza un TextEditingController que permite capturar y almacenar los datos ingresados.
  • La estructura base incluye etiquetas (label) y controladores asignados de manera única para cada campo.

¿Cómo implementar validaciones en los formularios?

  • Se usa un GlobalKey<FormState> para manejar el estado del formulario.
  • Los validadores son funciones asociadas a cada campo, verificando si este está vacío o contiene datos incorrectos.
  • Ejemplo de validación:
    • Si el campo de nombre está vacío, se muestra el mensaje: “Introduzca el nombre de la receta”.
    • En caso contrario, la validación pasa y el formulario continúa.

¿Cómo se conecta la validación con los controladores?

  • Cada campo del formulario recibe su propio controlador y validador.
  • La integración de los validadores requiere modificar la widget personalizada, añadiendo parámetros como:
    • validator: para recibir la función de validación.
    • maxLines: para definir el número máximo de líneas en campos como la descripción.

¿Cómo crear un botón funcional y estilizado?

  • Un botón centrado, implementado con ElevatedButton, maneja el envío del formulario.
  • Antes de procesar la información, se valida que todos los campos estén llenos.
  • En caso de éxito, el formulario se cierra con Navigator.pop.
  • Estilo del botón:
    • Color de fondo, tipografía en negrita y bordes redondeados.
    • Texto descriptivo como “Guardar receta”.

¿Cómo gestionar los campos con múltiples líneas?

  • Se agrega una variable opcional maxLines para manejar campos que requieran varias líneas, como la descripción de la receta.
  • Esto permite ajustar dinámicamente la cantidad de texto visible en el formulario.

¿Cómo verificar que las validaciones funcionan correctamente?

  • Al probar el formulario, los campos vacíos generan mensajes de error específicos.
  • Por ejemplo, si no se completa la URL de imagen, se solicita rellenar dicho campo antes de enviar.

Aportes 9

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Solución a el teclado tapa los fields. ![](https://static.platzi.com/media/user_upload/image-0c9fdda7-b753-42bb-82d0-55738c3f6ffb.jpg)
La verdad que Dart se ve un lenguaje bastante interesante y Flutter pinta muy bien. Les dejo este trucazo para evitar estar usando tanto SizedBox() ente los inputs de nuestro formulario: ![]()![](https://i.imgur.com/PCutx39.png) De esta forma no repetimos código. Luego, como lo que hemos creado es una lista de Widgets al incluirlo dentro de childre: \[], lo que hacemos es usar el spread operator: ...\_buildFormFields(),
Cambios que agregue para ajustar el modal conforme al teclado del celular ![](https://static.platzi.com/media/user_upload/image-3d985268-e0a4-46b6-a716-1adcc56ce6e6.jpg)![](https://static.platzi.com/media/user_upload/image-c7788290-784d-4821-af55-665f022c4654.jpg)![](https://static.platzi.com/media/user_upload/image-6f54aeac-442d-47ab-8fae-996dc2761e42.jpg)
Necesito ayuda no se porque , pero ahora cuando quiero escribir en el form se cierra el teclado apenas clickeo para escribir . HEEEELPP MEEE !!
Hola, el problema es que dentro del future no se define un padding para que no solape el teclado ``` Future<*void*> \_showButtom(BuildContext context) { *return* showModalBottomSheet( isScrollControlled*:* true, context*:* context, builder*:* (context) *=>* Padding( padding*:* EdgeInsets.only( bottom*:* MediaQuery.of(context).viewInsets.bottom, ), child*:* SizedBox( width*:* MediaQuery.of(context).size.width, height*:* 600, child*:* *const* RecipeForm(), ), ), ); } ```
Me siento bien , ya que lo hice de la misma forma que esta en el repo Yeeaaah
Me hubiera gustado que el curso tuviera más explicación sobre la teoría , como la diferencia entre Stateless y Statfull Widget , árbol de widgets, una buena estructuración del proyecto carpetas , módulos , vistas y como en este caso mas explicación sobre las GlobalKey de un Widget, Etc Siento que solo estoy replicando el codigo con el video sin entender a fondo los conceptos 🤔
Solicito ayuda, no me permite ingresar informacion, el teclado del celular se abre y se cierra al momento de intentar ingresar el texto. ![](https://static.platzi.com/media/user_upload/image-4a858b2a-da16-41ae-9b16-477f029d4f75.jpg)
![](https://static.platzi.com/media/user_upload/image-7674a25a-4c69-4897-9f27-ebf450e16791.jpg)