添加Firestore文档时更新ListView.builder itemCount

时间:2019-08-23 07:21:14

标签: flutter dart google-cloud-firestore

我有一个flutter应用程序,其中使用ListView.Builder生成列表,其中itemCount是Firestore集合中的文档数。在添加新文档之前,此方法工作正常。发生这种情况时,我会收到错误消息(17和18只是示例)。

  

无效值:不在0..17范围内(包括18)

我认为创建新文档时需要更新状态,但是我不知道在发生这种情况时如何调用setState

这是代码的相关部分:

child: StreamBuilder(
                stream: Firestore.instance.collection('contact').orderBy(sortby, descending: decending).snapshots(),
                builder: (context, snapshot) {
                  if (!snapshot.hasData) return Container();
                  return ListView.builder(
                    itemCount: snapshot.data.documents.length,
                    itemBuilder: (context, index) =>
                        _personer(context, snapshot.data.documents[index], index),
                  );
                },
              ),

2 个答案:

答案 0 :(得分:1)

使用setState吗?

 StreamBuilder(builder: (context, snapshot) {
   return snapshot.hasData == null ? Container() : _getListView(snapshot);
 } , )

_getListView(snapshot) {
setState(() {
  return ListView.builder(
    itemCount: snapshot.data.documents.length,
    itemBuilder: (context, index) =>
        _personer(context, snapshot.data.documents[index], index),
  );
});

}

答案 1 :(得分:0)

StreamBuilder使用QuerySnapshot,因此列表数据可以更改

示例代码:

 StreamBuilder<QuerySnapshot>(
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
            if (snapshot.hasError)
              return new Text('Error: ${snapshot.error}');
            switch (snapshot.connectionState) {
              case ConnectionState.waiting: return new Text('Loading...');
              default:
                return new ListView(
                  children: snapshot.data.documents.map((DocumentSnapshot document) {
                    return ;
                  }).toList(),
                );
            }
          },
        )