【问题标题】:RangeError (index): Invalid value: Valid value range is empty: 0 in List MapRangeError(索引):无效值:有效值范围为空:List Map中的0
【发布时间】:2021-06-10 17:18:46
【问题描述】:

在我的应用程序中,我想要一个带有饼图的 listView。这是我正在使用的pie_chart 库。

但我在List<Map<String,double>> 中遇到错误。

List<Map<String, double>> map = List<Map<String, double>>();

 ListView.builder(
          physics: NeverScrollableScrollPhysics(),
          shrinkWrap: true,
          itemCount: data.length,
          itemBuilder: (context, index) {
            var item = data[index];
            map[index].putIfAbsent("< 1 Weeks ago>", () => (2.0));
            return PieChart(
                     ...
                dataMap: map[index],
                     ...
            )
    }

错误

RangeError (index): Invalid value: Valid value range is empty: 0

错误指向map[index].putIfAbsent("&lt; 1 Weeks ago&gt;", () =&gt; (2.0));。这里有什么问题?

【问题讨论】:

  • 数据有什么? ListView.builder 运行时不为空吗?
  • @JaimeOrtiz data not null..我可以毫无问题地获得item[index],但添加map[index]后,错误仍然存​​在。
  • 为什么在 itemCount 中使用 data.length 而不是 map.length。这个data 变量是什么?
  • 可能列表 bulder 会抛出错误,因为 data 中的元素多于 map 中的元素,并且它尝试访问 map 中不存在的索引
  • @croxx5f 问题已编辑。地图长度应始终与data.length 相同。

标签: flutter dart listview hashmap


【解决方案1】:

要从数据中添加每个元素并将它们添加到地图中,我这样做了:

  @override
  Widget build(BuildContext context) {
    List map = [];

    List data = [
      {'entry_1': 1},
      {'entry_2': 2},
      {'entry_3': 3}
    ];

    return MaterialApp(
      title: MyApp._title,
      home: Scaffold(
        body: ListView.builder(
          physics: NeverScrollableScrollPhysics(),
          shrinkWrap: true,
          itemCount: data.length,
          itemBuilder: (context, index) {
            var item = data[index];
            map.add(item);
            return Container(
              height: 100,
              child: Text('Entry: ${map[index]}'),
            );
          },
        ),
      ),
    );
  }

这获取地图“数据”列表,获取每个值并将其添加到列表“地图”中,然后构建一个容器列表,其中包含一个包含地图从数据中获取的相应条目的文本小部件

【讨论】:

  • 感谢您的回答,但dataMap 应该接受&lt;Map&lt;String,double&gt;&gt;
  • 太好了,你是怎么做到的?
  • 我解释不好,在下面提供了我的答案。
【解决方案2】:

根据@Jamie 的线索设法修复它

ListView.builder(
          physics: NeverScrollableScrollPhysics(),
          shrinkWrap: true,
          itemCount: analytic.unitOwnerByWorkOrderCount.length,
          itemBuilder: (context, index) {
            var item = data[index];
            Map<String, double> map = Map<String, double>();
            List<Map<String, double>> list = List<Map<String, double>>();

            map.putIfAbsent("< 1 Weeks ago>",
                () => (item['less_one_weeks_ago'].toDouble()));
            list.add(map);
                 ....

           return PieChart(
               dataMap: list[index];
                 ....
           )
  }
   

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 2019-07-25
    • 2021-01-01
    • 2021-10-06
    • 2021-11-13
    • 2020-10-07
    • 2020-06-06
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多