Hoy vamos a hacer un widget personalizado llamado CustomDropdownButton
, que se utiliza para mostrar un menú desplegable (DropdownButton) con opciones seleccionables.
El widget acepta tres parámetros:
import 'package:flutter/material.dart'; import '../comun/Option.dart'; class CustomDropdownButton extends StatefulWidget { final Opcion opcionSeleccionada; final List<dynamic> opciones; final void Function(Opcion?) onChanged; CustomDropdownButton({ required this.opcionSeleccionada, required this.opciones, required this.onChanged, }); @override _CustomDropdownButtonState createState() => _CustomDropdownButtonState(); } class _CustomDropdownButtonState extends State<CustomDropdownButton> { @override Widget build(BuildContext context) { return Expanded( child: DropdownButton<Opcion>( isExpanded: true, value: widget.opcionSeleccionada, onChanged: widget.onChanged, items: widget.opciones .map<DropdownMenuItem<Opcion>>( (opcion) => DropdownMenuItem<Opcion>( value: opcion, child: Text(opcion.nombre), ), ) .toList(), ), ); } }
opcionSeleccionada
: Representa la opción actualmente seleccionada en el menú desplegable.opciones
: Es una lista de opciones que se mostrarán en el menú desplegable.onChanged
: Es una función que se llama cuando se cambia la selección del menú desplegable.
El objeto opcion:
import 'dart:convert'; import 'dart:ffi'; import 'dart:ui'; class Opcion{ String nombre; int value; Opcion({ required this.nombre, required this.value, }); Map<String, dynamic> toMap() { return {'nombre': nombre, 'value': value}; } factory Opcion.fromJson(Map<String, dynamic> json) { return Opcion( nombre: json['nombre'], value: json['value'], ); } }
Uso del Widget: Para utilizar este widget, simplemente hay que incorporarlo en el árbol de widgets y proporciona los parámetros requeridos como muestro a continuación:
CustomDropdownButton( opcionSeleccionada: miOpcionSeleccionada, opciones: listaDeOpciones, onChanged: (nuevaOpcion) { // Lógica para manejar el cambio de la opción seleccionada. // Puedes actualizar el estado u realizar otras acciones aquí. }, )
Creamos la variable miOpcionSeleccionada y la lista de opciones:
Por último visualizamos el resultado
Espero que les sirva de ayuda y que tengan un feliz día.