我有一个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),
);
},
),
答案 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(),
);
}
},
)