Error: Either zero or 2 or more [DropdownMenuItem]s were detected with the same value I/flutter (18363): 'package:flutter/src/material/dropdown.dart':

后端 未结 10 1387
借酒劲吻你
借酒劲吻你 2021-01-17 13:07

Error code Hi I\'m new to flutter and have a question about dropdownbutton regarding using the same values for multiple dropdownbutton.

From my understanding from th

相关标签:
10条回答
  • 2021-01-17 13:42

    I had the exact same error, multiple Dropdowns all feeding from the same static list, the only difference is that in my case, it was a list of Objects, not Strings.

    So, if it's a static list, there's no way it's empty, no duplicate values in the list, AND you already make sure value is not empty? Then the only option remaining is that item.value is different than value

    In my case, as it was an Object list, I had to overwrite operator == and hashcode methods in my Object class.

    bool operator ==(dynamic other) =>
          other != null && other is TimeSelection && this.hour == other.hour;
    
      @override
      int get hashCode => super.hashCode;
    

    And that was it. I didn't had to initialize _value1 or _value2

    0 讨论(0)
  • 2021-01-17 13:46

    This exception you have because of mistakes:

    1. No _value1 and _value2 initialization.
    2. When you initialize them make sure that _value1 and _value2 right from nameList e.g.
    _value1 = nameList[0];
    _value2 = nameList[3];
    

    this is important step with complex data type, but in your case

    _value1 = "Name1";
    _value2 = "Name4";
    

    will be sufficient.

    Full example:

      String _value1;
      String _value2;
    
      final List<String> nameList = <String>[
        "Name1",
        "Name2",
        "Name3",
        "Name4",
        "Name5",
        "Name6",
        "Name7",
        "Name8"
      ];
    
      /// initialization is here:
      @override
     void initState() {
        super.initState();
        _value1 = nameList[0];
        _value2 = nameList[3];
      }
    
      @override
      Widget build(BuildContext context) {
        return ListView(
          children: <Widget>[
            Row(
              children: <Widget>[
                Text('Name: '),
                Center(
                  child: DropdownButton(
                    value: _value1,
                    onChanged: (value) {
                      setState(() {
                        _value1 = value;
                      });
                    },
                    items: nameList.map(
                      (item) {
                        return DropdownMenuItem(
                          value: item,
                          child: new Text(item),
                        );
                      },
                    ).toList(),
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text('Name: '),
                Center(
                  child: DropdownButton(
                    value: _value2,
                    onChanged: (value) {
                      setState(() {
                        _value2 = value;
                      });
                    },
                    items: nameList.map(
                      (item) {
                        return DropdownMenuItem(
                          value: item,
                          child: new Text(item),
                        );
                      },
                    ).toList(),
                  ),
                ),
              ],
            ),
          ],
        );
      }
    }
    
    0 讨论(0)
  • 2021-01-17 13:47

    In my case, I use FormBuilderDropdown of the package flutter_form_builder. Adding key: UniqueKey() in the Widget FormBuilderDropdown is the solution for my case.

    0 讨论(0)
  • 2021-01-17 13:50

    _value1 and _value2 variables need to be initialized, or you can do that:

    value: _value1 != null ? _value1 : null,
    hint: Text('Your hint'),
    
    0 讨论(0)
提交回复
热议问题