颤振-如何将 Map<dynamic.dynamic> 转换为 List<String>

Posted

技术标签:

【中文标题】颤振-如何将 Map<dynamic.dynamic> 转换为 List<String>【英文标题】:flutter - how do you convert a Map<dynamic.dynamic> to List<String> 【发布时间】:2020-09-03 15:39:32 【问题描述】:

我正在未来的构建器中运行 Firebase 查询并检索子级。

快照恢复正常,但我想将数据添加到列表中

我想做以下事情:

litems.clear();

                                    Map<dynamic, String> values = snapshot.data.value;
                                    values.forEach((key, values) 
                                      litems.add(values);
                                    );

litems 是我想在下拉列表中使用的列表。

在我的下拉列表中:

items: litems.map((String value) 
                              return new DropdownMenuItem<String>(
                                value: value,
                                child: new Text(value),
                              );
                            ).toList(),

我在第一部分中遇到的错误是地图无法分配给列表

请帮忙!

【问题讨论】:

【参考方案1】:

您似乎试图将所有值添加为单个条目而不是特定值。

Map<dynamic, String> values = snapshot.data.value;
values.forEach((key, values) 
    litems.add(values);
);

你可以试试

Map<dynamic, String> values = snapshot.data.value;
values.forEach((value) 
    litems.add(value);
);

values.forEach((key, values) 
    litems.add(values[key]);
);

【讨论】:

我仍然在 Futurebuilder 中得到一个错误,它说 List 不是 Map 的子类型。在我的 Firebase 快照中,我将其作为 DocumentSnapshot 并使用属性 .once() 这是正确的吗? 并且在尝试执行 litems.add(values[key]) 时,它希望我输入一个整数 你必须向我们展示你是如何定义 litems 的,因为你没有在问题中添加它。【参考方案2】:

我看不出问题出在哪里,但在列表声明中使用 for 循环更简洁,可能会解决它:

item : [
    for(var value in litems.values)
        DropdownMenuItem<String>(
            value: value,
            child: Text(value),
        );
]

您需要 pubspec.yaml 中的最低 SDK 版本 >=2.6.0

【讨论】:

问题不在 grt 下拉列表中,当我尝试使用来自 firebase 的快照填充项目时出现错误。我被告知类型不匹配。快照是 Map 而列表是 List。即使我用静态项目替换下拉列表 那么不妨试试snapshot.valuelitems.add(values.value);。您必须匹配数据库的结构方式。您还可以在调试模式下运行并在检索快照后设置一个断点以查看它的确切外观。

以上是关于颤振-如何将 Map<dynamic.dynamic> 转换为 List<String>的主要内容,如果未能解决你的问题,请参考以下文章

颤振:如何将对象注册到具有名称的提供者并按名称获取

在颤振飞镖中的 List<Map> 内搜索?

未处理的异常:类型 'List<dynamic>' 不是颤振中类型 'Map<dynamic, dynamic>' 的子类型

颤振:异常 DioError [DioErrorType.DEFAULT]:类型 'String' 不是类型 'Map<String, dynamic>' 的子类型

将 Map 转换为 json 字符串颤振

错误颤振:List<dynamic> 不是 Map<String, dynamic> 类型的子类型