我正在处理一个flutter项目,在该项目中,我将一个对象数组(列表>数组)从我的集团传递给了流生成器。如果我打印对象,则打印效果很好,但是当我尝试在DropdownMenuItem中将它们映射出来时,会抛出上述错误。因此,如果我在类中以相同的格式创建了一个虚拟数组并对其进行访问,则不会收到错误。不确定我在这里缺少什么,代码如下。
StreamBuilder(
stream: _bLoc.getJsonArray,
builder: (context, snapshot) {
return snapshot.hasData
? new Container(
width: 150,
color: Theme.of(context).primaryColor,
child: new DropdownButton<String>(
items: snapshot.data.map((value) =>
new DropdownMenuItem<String>(
value: value["distance"],
child: new Text(value["distance"]),
)
).toList(),
onChanged: (_) {},
),
)
: Container();
}),
我的json结构如下。
[
{"distance": "12km","price": "200LKR",},
{"distance": "2km","price": "100LKR",},
{"distance": "132km","price": "340LKR",}
]
答案 0 :(得分:1)
错误告诉您正在将混凝土类型转换为动态类型。您可能需要使用.map<TYPE>()
强制转换为String
。查看此线程的结尾-https://github.com/flutter/flutter/issues/18979
答案 1 :(得分:0)
这是您必须使用地图作为列表构建的方式。您必须精确确定要返回的类型。特别是您可以做这样的事情
StreamBuilder(
stream: _bLoc.getJsonArray,
builder: (context, snapshot) {
return snapshot.hasData
? new Container(
width: 150,
color: Theme.of(context).primaryColor,
child: new DropdownButton<String>(
items: snapshot.data.map<DropdownMenuItem<String>>((value) =>
new DropdownMenuItem<String>(
value: value["distance"],
child: new Text(value["distance"]),
)
).toList(),
onChanged: (_) {},
),
)
: Container();
}),
PS 在尝试获取选定的DropdownMenuItem时,您会在这里捕获一些错误。考虑使用自定义生成的列表而不是映射