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

Flutter解析事件数组报错:_InternalLinkedHashMap无法转为Iterable

问题解决:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable'

错误原因

你的网络请求返回的数据结构和本地mySelectedEvents一致,是以日期为键、事件数组为值的Map,但你直接用for (var event in mySelectedEvents)遍历Map,而Map本身不是Iterable类型,导致类型转换错误。

正确解析步骤

1. 优化模型类(可选但推荐)

给Event类添加工厂构造函数,简化从JSON数据创建实例的过程:

class Event {
  String date;
  String descript;
  String title;

  Event(
    this.date,
    this.descript,
    this.title,
  );

  // 新增工厂构造函数,从JSON生成Event实例
  factory Event.fromJson(String date, Map<String, dynamic> json) {
    return Event(
      date,
      json['eventDescp'] ?? '', // 对应本地数据的eventDescp字段
      json['eventTitle'] ?? '', // 对应本地数据的eventTitle字段
    );
  }
}

2. 修正getData方法

遍历Map的键值对,逐个解析每个日期下的事件,最终收集为List<Event>:

Future<List<Event>> getData() async {
  var url = 'xxxxxxx';
  var res = await http.get(Uri.parse(url));
  // 解析后是Map<String, dynamic>,键是日期,值是事件数组
  Map<String, dynamic> mySelectedEvents = json.decode(res.body);
  
  List<Event> eventList = [];
  
  // 遍历Map的每个键值对
  mySelectedEvents.forEach((date, events) {
    // events是该日期下的事件数组,遍历每个事件
    for (var eventJson in events) {
      // 用工厂构造函数创建Event实例,加入列表
      eventList.add(Event.fromJson(date, eventJson));
      // 打印测试
      print(eventJson["eventDescp"]);
      print(eventJson["eventTitle"]);
    }
  });
  
  return eventList;
}

关键注意点

  • 不要直接遍历mySelectedEvents,需通过forEach或entries(如for (var entry in mySelectedEvents.entries))遍历Map的键值对
  • 网络返回的字段名要和本地数据完全匹配:是eventDescp和eventTitle,而非你之前代码里的descript或title

内容的提问来源于stack exchange,提问作者msi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:05:34