我有一个从Stream中获取的元素列表(通过initState方法),并通过ListView.builder显示了此元素列表。
由于元素没有变化,我只能获得新元素,因此我想向ListView追加新元素,以避免重建(可能很多)已经显示的元素。 我该怎么办?
谢谢!
List<X> elements;
@override
void initState() {
Stream<QuerySnapshot> snapshot = ...
snapshot.listen((snap) {
List<X> xs = [];
snap.docs.forEach((d) => xs.add( ... (d.data())));
setState(() => elements = xs);
});
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: elements.length,
itemBuilder: (context, index) {
return Text("...");
},
));
}
答案 0 :(得分:0)
仅当将项目添加到列表时,才可以使用setState。为此,您应该使用相同的列表,而不是xs。像这样:
snapshot.listen((snap) {
snap.docs.forEach((d) =>
{
setState(() => elements.add(d.data());
}
);
});