Flutter 添加firestore文档时更新ListView.builder itemCount
我有一个Flatter应用程序,其中列表是用ListView.Builder生成的,itemCount是firestore集合中的文档数。在添加新文档之前,此操作可以正常工作。当这种情况发生时,我得到了错误(17和18只是示例) 无效值:不在范围0..17内,包括:18 我假设在创建新文档时需要更新状态,但我不知道在这种情况下如何调用setState 以下是守则的相关部分: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
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不会更新。但是,当我在数据库中进行更改时,列表中的所有其他内容都会更改