显示实时数据库中的值。得到索引错误

时间:2020-08-24 14:00:50

标签: flutter firebase-realtime-database

我刚刚开始将flutter用于网络。目前,我正在尝试显示实时数据库中的数据。这是获取数据并显示它的代码。

class Company extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    DatabaseReference refe = database().ref('Company');
    return Scaffold(
      appBar: AppBar(),
      body: StreamBuilder(
        stream: database().ref('Company').onValue,
        builder: (context, snap) {
          if (snap.hasData) {
            List key1 = [];
            List item1 = [];
            int len;
            refe.once("value").then(
              (data) {
                len = data.snapshot.numChildren();
                var a = data.snapshot.toJson();
                a.forEach(
                  (key, values) {
                    key1.add(key);
                    item1.add(values);
                  },
                );
              },
            );

            return ListView.builder(
              itemCount: len,
              itemBuilder: (context, index) {
                return Row(
                  children: [
                    Expanded(
                      child: Card(child: Text(item1[index]['compName'])),
                    ),
                    Expanded(
                      child: Card(child: Text(item1[index]['companyID'])),
                    ),

                    //Text('Company Name'),
                  ],
                );
              },
            );
          } else
            return CircularProgressIndicator();
        },
      ),
    );
  }
}

代码本身运行良好,但在显示的结果下方出现错误。

Displayed the data but have flutter error below it

构建时引发了以下IndexError:RangeError(索引):Index 超出范围:索引应小于25:25

有人知道错误的原因吗?

1 个答案:

答案 0 :(得分:1)

欢迎来到堆栈溢出,这实际上是一个简单的问题。正如@ClaudioCastro所说,您试图访问超出范围的项目,当您拥有数组(列表)并且尝试访问其中不可用的项目时,就会发生这种情况。例如:

List list = [1, 2, 3] // index 0, 1, 2

如果您尝试访问不存在的元素:

print(list[3]) // RangeError (index): Index out of range

就像@ClaudioCastro也说的那样,这来自您的ListView构建器,您可能会给itemCount赋予比您更大的数字。

尝试打印lenitem1.length的值,然后检查是否得到相同的结果。