Creación de Formularios y Botones Interactivos en Aplicaciones

Clase 10 de 26Curso de Flutter

Resumen

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<FormState>(); 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'), ], )