首页 > 解决方案 > 从地图创建 DropDownMenuItem 列表

问题描述

我有一张这种类型的地图:

final Map<String,String> drinkNameToImage = {'Bloody Mary':'assets/drinks/bloody_mary.png',
  'Cuba Libre': 'assets/drinks/cuba_libre.png','Gin Tonic': 'assets/drinks/gin_tonic.png',
  'Margarita': 'assets/drinks/margarita.png', 'Martini': 'assets/drinks/martini.png',
  'Mojito' : 'assets/drinks/mojito.png', 'Pina Colada':'assets/drinks/pina_colada.png'};

我想创建一个带有列表的 DropDownButton,其中每个项目都包含鸡尾酒的名称和与之相关的图像。

我写了这段代码:

Widget build(BuildContext context) {
return DropdownButton(
    items: List.generate(drinkNameToImage.length, (int index) {
      return DropdownMenuItem(
          child: Container(
        padding: const EdgeInsets.only(bottom: 5.0),
        height: 100.0,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            Image(image: AssetImage(drinkNameToImage.values.elementAt(index))),
            Text(drinkNameToImage.keys.elementAt(index))],
        ),
      ));
    }),
    onChanged: null);

}

但运行它会引发一些错误

断言失败:第 1303 行第 12 行:'widget.items!.where((DropdownMenuItem item) => item.value == widget.value).length == 1':不正确。

我该如何解决?

标签: flutterflutter-layout

解决方案


DropdownMenuItem缺少DropdownButton属性value

 DropdownButton<String?>(
        value: drinkNameToImage.keys.elementAt(0),
        items: List.generate(
          drinkNameToImage.length,
          (int index) {
            return DropdownMenuItem<String>(
              value: drinkNameToImage.keys.elementAt(index),
              child: Container(
                padding: const EdgeInsets.only(bottom: 5.0),
                height: 100.0,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                     Image(
                      image: AssetImage(
                        drinkNameToImage.values.elementAt(index),
                      ),
                    ),
                    Text(
                      drinkNameToImage.keys.elementAt(index),
                    )
                  ],
                ),
              ),
            );
          },
        ),
        onChanged: (v) {},
      ),

确保value为每个DropdownMenuItem.


推荐阅读