如何使用具有相同值的下拉按钮?

how to use dropdownbutton with same value?

下拉按钮中几乎没有相同的值,当我点击它时显示错误,有没有办法使用具有相同值的下拉菜单。我尝试过使用 值:

DropdownButtonHideUnderline(
                    child: DropdownButton2(
                      iconEnabledColor: primaryColor,
                      selectedItemHighlightColor: primaryColor,
                      hint: Text(
                        'User type',
                        style: TextStyle(
                          fontSize: 14,
                          color: Theme.of(context).hintColor,
                        ),
                      ),
                      items: _user_type
                          .map((item) => DropdownMenuItem<String>(
                                value: item,
                                child: Text(
                                  item,
                                  style: const TextStyle(
                                    fontSize: 14,
                                  ),
                                ),
                              ))
                          .toList(),
                      value: selectedValue,
                      onChanged: (value) {
                        setState(() {
                          selectedValue = value as String;
                        });
                      },
                      buttonHeight: 40,
                      // buttonWidth: doubl,
                      itemHeight: 40,
                    ),

仍然收到错误

您为什么不尝试在 .map() 之前添加一个 .toSet()。 .toSet() 应该将您的列表过滤为唯一值。

 DropdownButtonHideUnderline(
                    child: DropdownButton2(
                      iconEnabledColor: primaryColor,
                      selectedItemHighlightColor: primaryColor,
                      hint: Text(
                        'User type',
                        style: TextStyle(
                          fontSize: 14,
                          color: Theme.of(context).hintColor,
                        ),
                      ),
                      items: _user_type
                          .toSet()
                          .map((item) => DropdownMenuItem<String>(
                                value: item,
                                child: Text(
                                  item,
                                  style: const TextStyle(
                                    fontSize: 14,
                                  ),
                                ),
                              ))
                          .toList(),
                      value: selectedValue,
                      onChanged: (value) {
                        setState(() {
                          selectedValue = value as String;
                        });
                      },
                      buttonHeight: 40,
                      // buttonWidth: doubl,
                      itemHeight: 40,
                    ),

每个 DropdownMenuItem 的值都应该是唯一的。为了使用具有重复值的列表,每个列表都应该有一个唯一的标识符。

您可以创建模型:

class Model {
  int id;
  String value;
  Model(this.id, this.value);
}

您可以创建具有重复值的列表:

 List<Model> list = [
    Model(0, "a"),
    Model(1, "a"),
    Model(2, "b"),
    Model(3, "b"),
    Model(4, "c"),
    Model(5, "c"),
  ];

…您可以在 DropdownButton:

中使用这样的列表
DropdownButton(
  value: _selectedValue,
  items: list
     .map((value) => DropdownMenuItem(
      value: value.id, child: Text(value.value)))
      .toList(),
  onChanged: (value) {
      _selectedValue = value as int;
       setState(() {});
          },
      )

试试下面的代码,我用过dropdown_button2

声明变量和下拉数据

 String selectedValue;
  List<String> items = [
    'User 1',
    'User 2',
    'User 3',
    'User 4',
    'User 5',
    'User 6',
  ];

您的小部件:

DropdownButtonHideUnderline(
          child: DropdownButton2(
            isExpanded: true,
            hint: Text(
              'User type',
              style: TextStyle(
                fontSize: 14,
                color: Theme.of(context).hintColor,
              ),
            ),
            items: items
                .map((item) => DropdownMenuItem<String>(
                      value: item,
                      child: Text(
                        item,
                        style: const TextStyle(
                          fontSize: 14,
                          color: Colors.black,
                        ),
                        overflow: TextOverflow.ellipsis,
                      ),
                    ))
                .toList(),
            value: selectedValue,
            onChanged: (value) {
              setState(() {
                selectedValue = value as String;
              });
            },
            buttonHeight: 50,
            buttonWidth: 160,
            buttonPadding:  EdgeInsets.all(8),
            buttonDecoration: BoxDecoration(
              borderRadius: BorderRadius.circular(14),
              border: Border.all(
                color: Colors.black26,
              ),
            ),
            itemHeight: 40,
          ),
        ),

你的下拉按钮结果->

你的下拉数据结果->

可以参考我的回答, , also for same using dropdown_below