Flutter - Map<String, dynamic> 到 Map<String, MyObject>
Posted
技术标签:
【中文标题】Flutter - Map<String, dynamic> 到 Map<String, MyObject>【英文标题】:Flutter - Map<String, dynamic> to Map<String, MyObject> 【发布时间】:2021-02-11 00:22:26 【问题描述】:我有一个像这样的 Json
"marDelPlata" :
"business" :
"b03":...,
"b11":...,
"b92":...,
"b141":...,
...
然后我有一个类,它有一个获取 json 并将其解码为地图的方法
class Server
Future<Map<String, dynamic>> getDataJSON(String location) async
String data = await rootBundle.loadString("assets/test_data/data.json");
Map dataMap = json.decode(data);
return dataMap[location];
还有一个函数,它应该获取 map
final Server _server = Server();
Future<Map<String, Business>> getAllBusiness() async
Map<String, dynamic> map1 = await _server.getDataJSON('marDelPlata');
Map<String, dynamic> map2 = map1['business'];
// The next line is not working:
Map<String, Business> map3 = map2.map((key, value) => MapEntry(key, Business.fromMap(value)));
return map3;
我收到此错误:“TypeError: elements is not iterable”
这是从地图创建业务类的代码
factory Business.fromMap(Map<String, dynamic> map)
if (map == null) return null;
return Business(
name: map['name'],
location: BusinessLocation.fromMap(map['location']),
sectionList: List<Section>.from(map['sectionList']?.map((x) => Section.fromMap(x))),
);
附加数据:我最近将我的项目迁移到 FlutterWeb 而不是应用程序。当我的项目是一个应用程序时,我得到的错误是:“InternalLinkedHashMap
希望你能帮我解决这个问题,谢谢。
【问题讨论】:
我建议你使用debug断点或者使用print语句,在失败的代码行之前查看map2的内容是什么。这应该让您更好地了解您需要如何处理其内容。我不清楚您的 map2.map 语句要达到什么目的。 @GrahamD 如果你打印 map2 你会得到: "b03":..., "b11":..., "b92":..., " b141":..., ... @GrahamD map2 只是一个 map好吧,您有一个异步函数调用,然后是使用异步调用中的日期的代码。由于它是异步的,因此无法保证调用何时结束。
所以你可以想象map1['business']
在分配给map2
时可能是空的。
Map<String, dynamic> map2 = map1['business'];
然后你迭代 map2
而不保证它实际上有数据。尝试将依赖于_server.getDataJSON('marDelPlata')
的代码放入.then()
语句中。
.then()
语句只会在它所附加的函数调用完成后执行代码。
【讨论】:
以上是关于Flutter - Map<String, dynamic> 到 Map<String, MyObject>的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 上向 List<Map<String, String>> 输入第三个字符串?
如何过滤 List<Map<String, dynamic>> 以在 Flutter 中获取值?
Flutter - 参数类型“Object”不能分配给参数类型“Map<String, dynamic>”
Flutter 中的 Json 解析:List<dynamic> 不是 'Map<String,dynamic>' 类型的子类型
Flutter 在 ListView 返回类型 String 中显示嵌套 json 不是类型转换中类型“Map<String, dynamic>”的子类型