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

Formularios en Flutter

10/26
Recursos

Crear interfaces intuitivas y atractivas es esencial para mejorar la experiencia del usuario en una aplicaci贸n. En este art铆culo, exploraremos c贸mo implementar botones interactivos y formularios personalizables, desde la conceptualizaci贸n hasta la personalizaci贸n avanzada, utilizando widgets en Flutter.

驴C贸mo implementar un bot贸n con acci贸n personalizada?

  • Usa un Floating Action Button: Este widget se utiliza para acciones principales. Puedes asignarle un onPressed que ejecutar谩 una funci贸n cuando se presione.
  • Personalizaci贸n del bot贸n:
    • Color: Define colores que resalten, como un naranja de tu paleta.
    • 脥conos: Agrega 铆conos clicables y color茅ales, por ejemplo, en blanco, para diferenciarlos del fondo.

C贸digo b谩sico:

FloatingActionButton(
  onPressed: () {
    // L贸gica a ejecutar
  },
  backgroundColor: Colors.orange,
  child: Icon(Icons.add, color: Colors.white),
),

驴C贸mo mostrar un formulario en un modal?

  • ShowModalBottomSheet: Permite mostrar un contenedor flotante desde la parte inferior de la pantalla.
  • Configuraci贸n inicial:
    • Altura din谩mica: Usa MediaQuery.of(context).size para adaptar el tama帽o al ancho de la pantalla.
    • Decoraci贸n: Aplica colores, contenedores y texto para estructurar el contenido.

Ejemplo:

void showModal(BuildContext context) {
  showModalBottomSheet(
    context: context,
    builder: (BuildContext context) {
      return Container(
        height: MediaQuery.of(context).size.height * 0.5,
        color: Colors.white,
        child: Center(child: Text('Hola, aqu铆 va tu formulario')),
      );
    },
  );
}

驴C贸mo estructurar un formulario con campos reutilizables?

  1. Crea una clase de formulario: Utiliza un StatelessWidget para estructurar tu formulario.
  2. Formulario din谩mico:
    • Usa Form con una clave (formKey) para manejar validaciones y control de campos.
    • Estructura los campos en columnas para una alineaci贸n vertical.

Ejemplo de formulario b谩sico:

class RecipeForm extends StatelessWidget {
  final _formKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(8.0),
      child: Form(
        key: _formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('Nueva Receta', style: TextStyle(fontSize: 24, color: Colors.orange)),
            SizedBox(height: 16),
            buildTextField('Nombre de la receta'),
          ],
        ),
      ),
    );
  }

  Widget buildTextField(String label) {
    return TextFormField(
      decoration: InputDecoration(
        labelText: label,
        labelStyle: TextStyle(color: Colors.orange),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),
          borderSide: BorderSide(color: Colors.orange, width: 1),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),
          borderSide: BorderSide(color: Colors.orange, width: 1.5),
        ),
      ),
    );
  }
}

驴C贸mo personalizar widgets para reutilizaci贸n?

  • Define widgets espec铆ficos: Crea widgets para campos de texto que incluyan estilos y validaciones comunes.
  • Propiedades importantes:
    • label: Texto para identificar el campo.
    • InputDecoration: Define bordes, colores y estilos.
    • BorderRadius: Redondea los bordes para un dise帽o m谩s moderno.

Widget de campo reutilizable:

Widget buildCustomTextField(String label, String fontFamily) {
  return TextFormField(
    decoration: InputDecoration(
      labelText: label,
      labelStyle: TextStyle(fontFamily: fontFamily, color: Colors.orange),
      enabledBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(10),
        borderSide: BorderSide(color: Colors.orange, width: 1),
      ),
      focusedBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(10),
        borderSide: BorderSide(color: Colors.orange, width: 1.5),
      ),
    ),
  );
}

Agrega campos al formulario:

Column(
  children: [
    buildCustomTextField('Nombre del autor', 'QuickSand'),
    SizedBox(height: 16),
    buildCustomTextField('Ingredientes', 'QuickSand'),
    SizedBox(height: 16),
    buildCustomTextField('Imagen URL', 'QuickSand'),
  ],
)

Aportes 10

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

![](https://static.platzi.com/media/user_upload/%7B2C63514A-138C-4135-B563-A32BA90503DD%7D-74cd446f-c916-4c43-8196-283349d24a83.jpg)
Los controladores en Flutter, como el `TextEditingController`, son fundamentales para manejar el texto en los campos de entrada. Su funci贸n principal es facilitar la lectura y escritura del contenido de un `TextField`. Permiten obtener el texto ingresado, modificarlo y escuchar cambios en tiempo real. Esto es crucial para implementar formularios interactivos, donde los datos del usuario deben ser capturados y validados antes de ser procesados. Utilizar controladores mejora la gesti贸n del estado y la funcionalidad general de la aplicaci贸n.
Mockoon es una herramienta de simulaci贸n de APIs que permite crear entornos locales para pruebas. Sus principales caracter铆sticas incluyen: 1. **Interfaz de usuario intuitiva**: Dise帽o f谩cil de usar para crear y gestionar APIs sin complicaciones. 2. **Soporte para m煤ltiples m茅todos HTTP**: Permite crear endpoints para GET, POST, PUT, DELETE, entre otros. 3. **Configuraci贸n de respuestas personalizadas**: Puedes definir respuestas espec铆ficas para cada endpoint, incluyendo c贸digos de estado y datos en JSON. 4. **Localhost**: Trabaja directamente en tu m谩quina local, lo que facilita el desarrollo y las pruebas. 5. **Exportaci贸n e importaci贸n**: Posibilidad de exportar tus configuraciones para compartirlas o importarlas en otros proyectos. Estas caracter铆sticas hacen de Mockoon una herramienta eficaz para el desarrollo y prueba de aplicaciones en Flutter, al facilitar la conexi贸n con APIs simuladas.
Para la implementacion de los cuadros, realice el uso de un map() y de esta manera generar una lista de string. Por ahora como solo necesito mostrar los elementos, no estoy tomando en cuenta la respuesta del textfield. ![](https://static.platzi.com/media/user_upload/image-1ad8955f-97b8-4e59-ae46-4b707fa7ff2a.jpg)
![](https://static.platzi.com/media/user_upload/image-a121928f-f198-4ded-ac34-d7ffe8f79189.jpg)
![](https://static.platzi.com/media/user_upload/image-a28b19dd-60a2-487b-b3c2-5e7f1ccdd37d.jpg)
El curso se centra en el desarrollo de aplicaciones m贸viles utilizando Flutter, un framework de Google. En la clase sobre "Formularios en Flutter", se aborda el manejo de entradas de usuario a trav茅s de botones y formularios. Se ense帽a a crear un bot贸n elevado que permite abrir un formulario y c贸mo implementar un formulario para recolectar informaci贸n del usuario, utilizando widgets como `floatingActionButton`, `showModalBottomSheet`, y `Form`. Tambi茅n se exploran opciones de personalizaci贸n, como colores y estilos, para mejorar la experiencia del usuario.
Le puse icono UwU ![](https://static.platzi.com/media/user_upload/image-3c18282f-6391-4f55-af02-56016d676024.jpg) Y as铆 me va quedando ![](https://static.platzi.com/media/user_upload/image-22c2faf4-3574-4639-a3c6-3effbbb4b6b6.jpg) ![](https://static.platzi.com/media/user_upload/image-7804676c-c480-4819-a0bb-0bb417ef7468.jpg)
馃槏鉂ゐ煒嶁潳
![](https://static.platzi.com/media/user_upload/image-14c58d50-b0f3-4ffa-b3f3-06f6710f13fe.jpg)聽 聽 聽 聽 聽 聽 聽 聽 SizedBox( height: 16,),聽 聽 聽 聽 聽 聽 聽 聽 \_buidTextField(label: 'Recipe Name'),聽 聽 聽 聽 聽 聽 聽 聽 SizedBox( height: 16,),聽 聽 聽 聽 聽 聽 聽 聽 \_buidTextField(label: 'Nombre Author'),聽 聽 聽 聽 聽 聽 聽 聽 SizedBox( height: 16,),聽 聽 聽 聽 聽 聽 聽 聽 \_buidTextField(label: 'Image URL'),聽 聽 聽 聽 聽 聽 聽 聽 SizedBox( height: 16,),聽 聽 聽 聽 聽 聽 聽 聽 \_buidTextField(label: 'Ingredients'),聽 聽 聽 聽 聽 聽 聽 聽 SizedBox( height: 16,),聽 聽 聽 聽 聽 聽 聽 聽 \_buidTextField(label: 'Recipe Content'),聽 聽 聽 聽 聽 聽 聽 聽 SizedBox( height: 16,), Yo lo inclui de esta forma: ```js SizedBox( height: 16,), _buidTextField(label: 'Recipe Name'), SizedBox( height: 16,), _buidTextField(label: 'Nombre Author'), SizedBox( height: 16,), _buidTextField(label: 'Image URL'), SizedBox( height: 16,), _buidTextField(label: 'Ingredients'), SizedBox( height: 16,), _buidTextField(label: 'Recipe Content'), SizedBox( height: 16,), ```