Flutter订阅/查询cloudfirestore中一个文件中的一个字段



展位颤动和堆叠气流的新手。我正在为我的flutter应用程序进行帐户验证。我的计划是将其功能分为两部分,第一部分在构建屏幕时显示警报对话框,第二部分检查";激活";消防仓库的字段是真是假我有制作第二部分的问题这是我为第一部分写的

String uid = "fdv89gu3njgnhJGBh";
bool isActivated = false; 
@override
void initState() {
super.initState();
Future.delayed(Duration.zero, () {
if (isActivated == false) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return WillPopScope(
onWillPop: () async {
return false;
},
child: AlertDialog(
title: Text("Activation pending"),
content: Text("Your account is waiting to be activate by admin"),
actions: [
FlatButton(
child: Text("Refresh"),
onPressed: () {
// just bring reassurance to user
},
),
],
),
);
});
}
});
}

在第二部分中,我计划制作一个Future返回类型的函数,它将订阅存储在firestore:/user/uid/activated中的布尔值,一旦该函数获得";真";从firestore,它将返回到第一部分,第一部分将关闭alert对话框(我还不知道如何做到这一点(。

我已经从互联网上看到了一些解决方案,但大多数解决方案都涉及StreamBuilder,但在第二部分中,我似乎不需要为流构建任何小部件。只是对我之前写的内容进行更改*还是将两部分都集成为一体的StreamBuilder函数更好?

*我所写的是从所有文件中的一个字段获取数据(这很好(:

Future<bool> registeredCheck(String email) async {
var userInfo = await _firestore.collection("user").get();
for (var userInf in userInfo.docs) {
if (userInf.data()["email"] == email) {
return true;
}
}
return false;
}
}

谢谢

您不必查询整个集合。既然你已经知道了uid,你就可以直接得到uid的文档,如下所示:

Future<bool> registeredCheck(String email) async {
final userDoc = await _firestore.collection("user").doc(uid).get();
return userDoc.data()['activated'] ?? false;
}

我之所以添加?? false,是为了在激活值为空时返回false而不是null

相关内容

最新更新