Saltar al contenido

Flutter: debe haber exactamente un elemento con [DropdownButton]valor de

Solución:

Bueno, ya que ningún problema tiene exactamente la misma solución. Estaba enfrentando el mismo problema con mi código. Así es como solucioné esto.

CÓDIGO de mi DropdownButton:

DropdownButton(
   items: _salutations
         .map((String item) =>
             DropdownMenuItem<String>(child: Text(item), value: item))
         .toList(),
    onChanged: (String value) {
       setState(() {
         print("previous ${this._salutation}");
         print("selected $value");
         this._salutation = value;
            });
          },
     value: _salutation,
),

El error

En el fragmento de código a continuación, establezco el estado de un valor de selección, que es de tipo String. Ahora el problema con mi código fue la inicialización predeterminada de este valor de selección. Inicialmente, estaba inicializando la variable _salutation como:

String _salutation = ""; //Notice the empty String.

¡Fue un error!

La selección inicial no debe ser nula o vacía como el mensaje de error se menciona correctamente.

‘elementos == nulo || items.isEmpty || valor == nulo ||

Y de ahí el choque:

crash_message

Solución
Inicialice el objeto de valor con algún valor predeterminado. tenga en cuenta que el value debe ser uno de los valores contenidos en su colección. Si no es así, espere un accidente.

  String _salutation = "Mr."; //This is the selection value. It is also present in my array.
  final _salutations = ["Mr.", "Mrs.", "Master", "Mistress"];//This is the array for dropdown

También podría obtener este error si intenta establecer el valor del menú desplegable con una instancia de clase;

  var tag1 = Tag();
  var tag2 = Tag();
  print(tag1 == tag2); // prints false, dropwdown computes that value is not present among dropdown options

Para resolver este operador de anulación ==:

class Tag{
 String name = "tag";

  @override
  bool operator ==(Object other) => other is Tag && other.name == name;

  @override
  int get hashCode => name.hashCode;
}

o use https://pub.dev/packages/equatable lib

class Tag extends Equatable{
 String name = "tag";

  @override
  List<Object> get props => [name];
}

Yo tuve el mismo problema. La solución es simple: debe asegurarse de que la Cadena que es su valor desplegable predeterminado esté contenida en la lista que desea usar en su menú desplegable. Si quisiera, digamos, usar una lista de una API, debe asegurarse de conocer al menos un valor de esa lista, para poder asignarlo a la variable que es su valor desplegable predeterminado.

Aquí quiero mostrar una lista que obtengo de una api. Para no obtener el error, configuro mi valor de dropdown predeterminado con el nombre ‘Encajes’ que es una de las categorías existentes que contiene mi lista.

String dropdownValue = "Encajes";

    items: categoriesString
    .map<DropdownMenuItem<String>>((String value) {
  return DropdownMenuItem<String>(
    value: value,
    child: Text(value),
  );
}).toList(),
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *