这对我来说有点像个错误,但我不确定。我在通过Stream Builder运行的Flutter应用中有一个简单的Firestore查询。看起来像这样-
StreamBuilder(
stream: Firestore.instance.collection('users').where('toNumber', isEqualTo: '123').snapshots();
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
} else {
if (snapshot.data.length == 0) {
return Center(child: Text("No Data"));
} else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) =>
_buildList(
context, snapshot.data[index]),
);
}
}
)
问题是,如果查询没有返回结果,那么您在连续进度指示器中看到的所有内容。我以为hasData
会返回true,但事实并非如此。我也尝试使用ConnectionState,但这总是返回.waiting
。
在这种情况下,您如何区分正在加载的查询和不返回任何结果的查询?
答案 0 :(得分:0)
尝试以下方法:
if (!snapshot.hasData) {
if (snapshot.data.length == 0) {
return Center(child: Text("No Data"));
}
else{
return Center(
child: CircularProgressIndicator(),
);
}
}
答案 1 :(得分:0)
这是我的构建方法。我刚刚测试过,它正在工作。
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: firestore
.collection('todos')
.where('state', isEqualTo: false)
.snapshots(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
print(snapshot.connectionState);
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return snapshot.data.documents.isNotEmpty
? ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (_, index) {
return Text(snapshot.data.documents[index].data["title"]);
})
: Text('No Data');
});
}
此打印:
I/flutter ( 6216): ConnectionState.waiting
I/flutter ( 6216): ConnectionState.active