我刚刚开始将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
有人知道错误的原因吗?
答案 0 :(得分:1)
欢迎来到堆栈溢出,这实际上是一个简单的问题。正如@ClaudioCastro所说,您试图访问超出范围的项目,当您拥有数组(列表)并且尝试访问其中不可用的项目时,就会发生这种情况。例如:
List list = [1, 2, 3] // index 0, 1, 2
如果您尝试访问不存在的元素:
print(list[3]) // RangeError (index): Index out of range
就像@ClaudioCastro也说的那样,这来自您的ListView构建器,您可能会给itemCount
赋予比您更大的数字。
尝试打印len
和item1.length
的值,然后检查是否得到相同的结果。