如何在Flutter中解析从Firebase获取的动态JSON并解决相关报错
问题原因
你请求/water.json接口返回的是_InternalLinkedHashMap<String, dynamic>类型的键值对结构,不是可遍历的列表/Iterable类型,直接对Map执行for...in遍历触发了类型不匹配错误。
解决方案
修改loadSalesData方法,遍历Map的values属性(所有键对应的值就是你需要的每条含水数据记录),修正后代码如下:
Future loadSalesData() async { final String jsonString = await getJsonFromFirebase(); // 明确声明返回类型为Map,避免dynamic类型的隐式转换问题 final Map<String, dynamic> jsonResponse = json.decode(jsonString); // 遍历Map的所有值 for (var item in jsonResponse.values) { chartData.add(SalesData.fromJson(item)); } }
如果后续你修改请求地址为Firebase根节点,返回的JSON包含最外层的water字段,则需要先提取water节点再遍历:
Future loadSalesData() async { final String jsonString = await getJsonFromFirebase(); final Map<String, dynamic> rootResponse = json.decode(jsonString); final Map<String, dynamic> waterMap = rootResponse['water']; for (var item in waterMap.values) { chartData.add(SalesData.fromJson(item)); } }
内容的提问来源于stack exchange,提问作者Nairobi
相关产品推荐
相关产品推荐

