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

Flutter使用pie_chart库时List<Map>报RangeError空索引错误如何解决?

错误原因
  • 你初始化的List<Map<String, double>> map是长度为0的空列表,没有预先填充对应data.length数量的Map元素,直接通过map[index]访问不存在的索引位置,触发了下标越界错误。
  • 即便你给map设置了初始长度,如果对应索引位置的元素为null,调用putIfAbsent方法也会触发空指针异常。
修复方案

方案一:局部构建单条数据的Map(更推荐)

不需要提前声明全局的map列表,直接在itemBuilder中针对当前条目构建对应饼图需要的dataMap即可:

ListView.builder(
  physics: NeverScrollableScrollPhysics(),
  shrinkWrap: true,
  itemCount: data.length,
  itemBuilder: (context, index) {
    var item = data[index];
    // 当场构建当前索引对应饼图的dataMap
    Map<String, double> currentMap = {};
    currentMap.putIfAbsent("< 1 Weeks ago>", () => 2.0);
    // 如需添加item中的其他统计数据,直接往currentMap中插入即可
    return PieChart(
      // 其他配置项
      dataMap: currentMap,
      // 其他配置项
    );
  }
)

方案二:预先填充全局Map列表

如果你确实需要将所有饼图的dataMap统一存储在全局列表中,初始化时就要提前填充和data长度一致的空Map:

// 注意要保证data已经完成初始化,再执行这行代码生成map列表
List<Map<String, double>> map = List.generate(data.length, (index) => <String, double>{});

完成初始化后,你原有代码中map[index].putIfAbsent的逻辑即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:15:10