一尘不染

错误:检测到零个或两个或两个以上具有相同值I / flutter(18363)的[DropdownMenuItem]:'package:flutter / src / material / dropdown.dart':

flutter

错误代码
嗨,我是新手,对于关于dropdownbutton的问题,关于将多个dropdownbutton使用相同的值有疑问。

根据我对错误的理解,这是由于在同一活动中为2个或更多下拉按钮使用了相同的列表。

我如何解决此错误,但仍然可以将列表重新用于2个或更多下拉按钮?

  String _value1;
  String _value2;

  final List<String> nameList = <String>[
    "Name1",
    "Name2",
    "Name3",
    "Name4",
    "Name5",
    "Name6",
    "Name7",
    "Name8"
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 2.0,
        title: Text('Hello'),
      ),
      body:  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(),
                    ),
                  ),
                ],
              ),
            ],
          ),
      backgroundColor: Colors.grey[200],
    );
  }
}

阅读 263

收藏
2020-08-13

共1个答案

一尘不染

我遇到了完全相同的错误,多个Dropdowns都从同一个静态列表中获取数据,唯一的区别是在我的情况下,它是对象列表,而不是字符串列表。

因此,如果它是静态列表,则不可能为空,列表中没有重复的值,并且您已经确定value不为空?那么剩下的唯一选择item.value就是与value

就我而言,因为它是一个对象列表,所以我必须覆盖对象类中的operator ==hashcode方法。

bool operator ==(dynamic other) =>
      other != null && other is TimeSelection && this.hour == other.hour;

  @override
  int get hashCode => super.hashCode;

就是这样。我不必初始化_value1_value2

2020-08-13