颤振-如何将 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.once()
这是正确的吗?我看不出问题出在哪里,但在列表声明中使用 for 循环更简洁,可能会解决它:
item : [
for(var value in litems.values)
DropdownMenuItem<String>(
value: value,
child: Text(value),
);
]
您需要 pubspec.yaml 中的最低 SDK 版本 >=2.6.0
【讨论】:
问题不在 grt 下拉列表中,当我尝试使用来自 firebase 的快照填充项目时出现错误。我被告知类型不匹配。快照是 Mapsnapshot.value
或litems.add(values.value);
。您必须匹配数据库的结构方式。您还可以在调试模式下运行并在检索快照后设置一个断点以查看它的确切外观。以上是关于颤振-如何将 Map<dynamic.dynamic> 转换为 List<String>的主要内容,如果未能解决你的问题,请参考以下文章
未处理的异常:类型 'List<dynamic>' 不是颤振中类型 'Map<dynamic, dynamic>' 的子类型
颤振:异常 DioError [DioErrorType.DEFAULT]:类型 'String' 不是类型 'Map<String, dynamic>' 的子类型