Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 错误:检测到零个或2个或多个[DropdownMenuItem]具有相同的值I/颤振(18363):&x27;包装:颤振/src/material/dropdown.dart';:_Flutter - Fatal编程技术网

Flutter 错误:检测到零个或2个或多个[DropdownMenuItem]具有相同的值I/颤振(18363):&x27;包装:颤振/src/material/dropdown.dart';:

Flutter 错误:检测到零个或2个或多个[DropdownMenuItem]具有相同的值I/颤振(18363):&x27;包装:颤振/src/material/dropdown.dart';:,flutter,Flutter,嗨,我是新来的颤振,有一个关于dropdownbutton的问题,关于对多个dropdownbutton使用相同的值 从我对错误的理解来看,这是由于在同一活动中对2个或更多下拉按钮使用了相同的列表 我如何才能解决此错误,但仍然能够为2个或更多下拉按钮重用列表 String _value1; String _value2; final List<String> nameList = <String>[ "Name1", "Name2",

嗨,我是新来的颤振,有一个关于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],
    );
  }
}
字符串_值1;
字符串_值2;
最终列表名称列表=[
“名称1”,
“名称2”,
“名称3”,
“名称4”,
“名称5”,
“名称6”,
“姓名7”,
“姓名8”
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标高:2.0,
标题:Text('Hello'),
),
正文:ListView(
儿童:[
划船(
儿童:[
文本('名称:'),
居中(
孩子:下拉按钮(
值:_值1,
一旦更改:(值){
设置状态(){
_value1=值;
});
},
项目:nameList.map(
(项目){
返回下拉菜单项(
价值:项目,,
子项:新文本(项目),
);
},
).toList(),
),
),
],
),
划船(
儿童:[
文本('名称:'),
居中(
孩子:下拉按钮(
值:_值2,
一旦更改:(值){
设置状态(){
_value2=值;
});
},
项目:nameList.map(
(项目){
返回下拉菜单项(
价值:项目,,
子项:新文本(项目),
);
},
).toList(),
),
),
],
),
],
),
背景颜色:颜色。灰色[200],
);
}
}

您可以在多个
下拉按钮中使用相同的列表。您得到的错误是因为列表中有多个相同的值。
例如,如果我将列表更改为下面给定的,其中有两个项目具有相同的值,它将抛出一个错误

`final List<String> nameList = <String>[
    "Name1",
    "Name1",
    "Name3",
    "Name4",
    "Name5",
    "Name6",
    "Name7",
    "Name8"
  ];`
`最终列表名称列表=[
“名称1”,
“名称1”,
“名称3”,
“名称4”,
“名称5”,
“名称6”,
“姓名7”,
“姓名8”
];`
错误:

您必须用初始值初始化
\u值1
\u值2

我遇到了同样的问题,我解决了它。 下拉按钮需要项目列表和值。我们定义了项和选定项,但选定项实例不在项列表中

你应该试试这个,修正你的逻辑。 (值ı为用户选择的项目值)


更多信息:

\u value1
\u value2
变量需要初始化,或者您可以执行以下操作:

value: _value1 != null ? _value1 : null,
hint: Text('Your hint'),

您得到该异常是因为_value1和_value2未初始化,并向下拉小部件提供空值

你可以这样做:

DropdownButton(
  value: _value1.isNotEmpty ? _value1 : null, // guard it with null if empty
  items: nameList.map((item) {
           return DropdownMenuItem(
              value: item,
              child: new Text(item),
           );
         }).toList(), 
);

您必须初始化
\u值1
\u值2
,并确保这些值也存在于
名称列表中

我有完全相同的错误,多个下拉列表都来自同一个静态列表,唯一的区别是,在我的例子中,它是一个对象列表,而不是字符串

所以,如果它是一个静态列表,那么它不可能是空的,列表中没有重复的值,并且您已经确保
value
不是空的?然后剩下的唯一选项是
项。值
不同于

在我的例子中,由于它是一个对象列表,我必须覆盖对象类中的
operator==
hashcode
方法

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

  @override
  int get hashCode => super.hashCode;

就这样。我不必初始化
\u值1
\u值2
此异常是由于错误导致的:

  • \u值1
    \u值2
    初始化
  • 初始化它们时,请确保
    名称列表中的
    \u值1
    \u值2
    正确,例如
  • 对于复杂的数据类型,这是重要的一步,但在您的情况下

    _value1 = "Name1";
    _value2 = "Name4";
    
    这就足够了

    完整示例:

      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(),
                  ),
                ),
              ],
            ),
          ],
        );
      }
    }
    
    字符串_值1;
    字符串_值2;
    最终列表名称列表=[
    “名称1”,
    “名称2”,
    “名称3”,
    “名称4”,
    “名称5”,
    “名称6”,
    “姓名7”,
    “姓名8”
    ];
    ///初始化如下:
    @凌驾
    void initState(){
    super.initState();
    _value1=名称列表[0];
    _value2=名称列表[3];
    }
    @凌驾
    小部件构建(构建上下文){
    返回列表视图(
    儿童:[
    划船(
    儿童:[
    文本('名称:'),
    居中(
    孩子:下拉按钮(
    值:_值1,
    一旦更改:(值){
    设置状态(){
    _value1=值;
    });
    },
    项目:nameList.map(
    (项目){
    返回下拉菜单项(
    价值:项目,,
    子项:新文本(项目),
    );
    },
    ).toList(),
    ),
    ),
    ],
    ),
    划船(
    儿童:[
    文本('名称:'),
    居中(
    孩子:下拉按钮(
    值:_值2,
    
    _value1 = "Name1";
    _value2 = "Name4";
    
      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(),
                  ),
                ),
              ],
            ),
          ],
        );
      }
    }
    
    value: _value1,
        onChanged: (value) {
          setState(() {
            _value1 = value;
            _value2 = null;
          });
        },