【问题标题】:type 'List<dynamic>' is not a subtype of type 'List<DropdownMenuItem<String>>''List<dynamic>' 类型不是 'List<DropdownMenuItem<String>>' 类型的子类型
【发布时间】:2019-11-07 11:52:31
【问题描述】:

我正在做一个颤振项目,我将一个对象数组(List> 数组)从我的块传递给流构建器。如果我打印它打印得很好的对象,但是当我尝试将它们映射到 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",}
 ]

【问题讨论】:

    标签: flutter dart dropdownbutton


    【解决方案1】:

    这就是您必须使用地图作为列表构建的方式。您必须精确确定要返回的类型。特别是你可以做这样的事情

    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 时,您可以在此处发现一些错误。考虑使用自定义生成的列表而不是映射

    【讨论】:

      【解决方案2】:

      正如错误告诉您正在将具体类型转换为动态。您可能想使用.map&lt;TYPE&gt;() 转换为String。看到这个帖子的结尾 - https://github.com/flutter/flutter/issues/18979

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2021-12-29
        • 2023-01-08
        • 2021-07-06
        • 2021-02-17
        • 2021-07-17
        • 1970-01-01
        相关资源
        最近更新 更多