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
相关产品推荐
相关产品推荐

