You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:04