我正在尝试使用以下代码检查Firestore文档是否存在:
Future<bool> checkRegisterState2() async {
bool _isregistered;
await userRef.snapshots().listen((datasnapshot) {
if (datasnapshot.exists) {
_isregistered = true;
}else{
_isregistered = false;
}
});
if(_isregistered){
return true;
}else{
return false;
}
}
但似乎if-else语句没有等待firebase快照的结果,因此说_isregistered的值为空。
请问如果Firestore文档存在,返回真值的正确方法是什么?
答案 0 :(得分:0)
一种非常基本的方法是:
if (snapshot.hasError) return new Text('${snapshot.error}'); // or something similar
答案 1 :(得分:0)
首选.listen()
胜过.then()
的原因是什么?您是要在等待文档创建后再对文档做出反应,还是只希望查看用户是否存在?
对于调试,我特别喜欢print()语句。如果您在print(datasnapshot)
之前添加if (datasnapshot.exists) {
另一件事:为什么不使用附加的if / else {}语句,为什么不简单地返回布尔值_isRegistered
?
答案 2 :(得分:0)
我还没有测试过,但是根据您的用例,您可以使用Stream或Future
Stream<bool> isRegistered() {
return userRef.snapshots().map((DocumentSnapshot snapshot) => snapshot.exists)
}
Future<bool> isRegistered() async {
return await userRef.get().then((DocumentSnapshot snapshot) => snapshot.exists)
}