类型'List <dynamic>'不是类型'List <DropdownMenuItem <String >>'的子类型

时间:2019-06-25 15:28:47

标签: flutter dart dropdownbutton

我正在处理一个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",}
 ]

2 个答案:

答案 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时,您会在这里捕获一些错误。考虑使用自定义生成的列表而不是映射