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

时间:2021-06-10 17:18:46

标签: flutter dart listview hashmap

在我的应用中,我想要一个带有饼图的 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("< 1 Weeks ago>", () => (2.0));。这里有什么问题?

2 个答案:

答案 0 :(得分: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]}'),
            );
          },
        ),
      ),
    );
  }

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

答案 1 :(得分:1)

根据@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];
                 ....
           )
  }