你好,我是 flutter 和 firebase 的新手,我在用户文档中有一个名为 admin 的字段,它是一个布尔值,我想在登录功能中检查这个布尔值。到目前为止我想到的是:
onPressed: () async {
if (_formKey.currentState.validate()) {
if (!await user.signIn(_email.text, _password.text)) {
toast("Signin Faild");
} else {
if(await _firestore.collection('users').doc(_auth.currentUser.uid).get().)
changeScreenReplacement(context, HomePage());
toast("Signedin successfully");
}
}
},
我不知道在这部分该怎么做:
if(await _firestore.collection('users').doc(_auth.currentUser.uid).get().)
我想在这里检查该字段是否等于 true 或 false 我该怎么做?
答案 0 :(得分:0)
等待 get() 调用后,您将拥有一个 DocumentSnapshot 实例,您可以从中读取数据。
在 DocumentReference 上调用 get() 总是返回 DocumentSnapshot 实例,即使文档不存在于数据库中。所以你可能还需要检查一下。
如果数据库中不存在这样的文档,那么在 DocumentSnapshot 上调用 data() 也会返回 null。
所以这至少可以写成两种方式。
显式检查数据库中是否存在文档。
final userSnapshot = await _firestore.collection('users').doc(_auth.currentUser.uid).get();
if(userSnapshot.exists) {
if(userSnapshot.data()['admin'] == true) {
toast('User is admin');
} else {
toast('User not admin');
}
} else {
toast('User document not exist in database');
}
或者以简短的方式,忽略用户文档可能不存在的事实。
final userSnapshot = await _firestore.collection('users').doc(_auth.currentUser.uid).get();
if(((await _firestore.collection('users').doc(_auth.currentUser.uid).get()).data() ?? const {})['admin'] == true) {
toast('User is admin');
} else {
toast('User not admin or user document not exist');
}