Flutter 添加firestore文档时更新ListView.builder itemCount

Flutter 添加firestore文档时更新ListView.builder itemCount,flutter,dart,google-cloud-firestore,Flutter,Dart,Google Cloud Firestore,我有一个Flatter应用程序,其中列表是用ListView.Builder生成的,itemCount是firestore集合中的文档数。在添加新文档之前,此操作可以正常工作。当这种情况发生时,我得到了错误(17和18只是示例) 无效值:不在范围0..17内,包括:18 我假设在创建新文档时需要更新状态,但我不知道在这种情况下如何调用setState 以下是守则的相关部分: child:StreamBuilder( 流:Firestore.instance.collection('contact

我有一个Flatter应用程序,其中列表是用ListView.Builder生成的,itemCount是firestore集合中的文档数。在添加新文档之前,此操作可以正常工作。当这种情况发生时,我得到了错误(17和18只是示例)

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

我假设在创建新文档时需要更新状态,但我不知道在这种情况下如何调用setState

以下是守则的相关部分:

child:StreamBuilder(
流:Firestore.instance.collection('contact').orderBy(排序,降序:降序)。快照(),
生成器:(上下文,快照){
如果(!snapshot.hasData)返回容器();
返回ListView.builder(
itemCount:snapshot.data.documents.length,
itemBuilder:(上下文,索引)=>
_personer(上下文、快照、数据、文档[索引]、索引),
);
},
),
是否使用设置状态

 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),
  );
});

}

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(),
                );
            }
          },
        )
StreamBuilder(
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasError)
返回新文本('Error:${snapshot.Error}');
交换机(快照.连接状态){
case ConnectionState.waiting:返回新文本('Loading…');
违约:
返回新的ListView(
子项:snapshot.data.documents.map((DocumentSnapshot文档){
返回;
}).toList(),
);
}
},
)

结果证明这是行不通的。snapshot.data.documents.length的值在我的代码中确实会更新,但由于某些原因itemCount不会更新。但是,当我在数据库中进行更改时,列表中的所有其他内容都会更改