flutter - 从地图创建 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':不正确。
我该如何解决?
解决方案
和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
.
推荐阅读
- c++ - bazel 中的错误“名称‘new_local_repository’未定义”
- mysql - 在 spark 2.x 中,除了使用 DF.write.mode().jdbc().....,如何将 Dataframe 数据写入 mysql
- python - 如何将系列与数据框合并,同时保留双方的数据
- python - scipy ndimage 没有属性过滤器?
- c# - 控制器中特定“异步”操作的 Autofac 过滤器不起作用
- julia - Julia 的累积集成选项
- c# - 如何访问表单的位置属性?
- c# - 使用 MVVMLight.Messaging 在视图模型之间进行消息传递时绑定不更新
- java - 如何通过android中的反射来识别经过身份验证的手指的存储ID
- python - 在带有 CSV 和 DateTime 的 HTML 页面上使用 Bokeh 将 ('Figure id ='1001'...) 显示为输出