ListView.builder追加新项目

问题描述

我有一个从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("...");
      },));
  }

解决方法

仅当将项目添加到列表时,才可以使用setState。为此,您应该使用相同的列表,而不是xs。像这样:

       snapshot.listen((snap) {
        
         snap.docs.forEach((d) => 
                 {
                  setState(() => elements.add(d.data());                   
                 }
                );
       });