我想,如果用戶在登錄時是醫生或患者,他們會被發送到各自的螢屏,但我撰寫的代碼不起作用!
signInsignUpButton(context, true, () async {
await FirebaseAuth.instance
.signInWithEmailAndPassword(
email: _emailTextController.text,
password: _passwordTextController.text,
)
.then((value) async {
// print(value);
final userid =
FirebaseAuth.instance.currentUser!.uid.toString();
print(userid);
var doctors = await FirebaseFirestore.instance
.collection('Doctors')
.where('D_Id', isEqualTo: userid)
.get();
var patients = await FirebaseFirestore.instance
.collection('Patients')
.where('uid', isEqualTo: userid)
.get();
var admins = await FirebaseFirestore.instance
.collection('Admins')
.where('uid', isEqualTo: userid)
.get();
if (patients != null) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomeScreen()));
} else if (doctors != null) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomeScreenDoc()));
} else if (admins != null) {
Navigator.push(context,
MaterialPageRoute(builder: (context) => MainHome()));}
問題是它只檢查第一個 if 陳述句并忽略其余部分并在第一個 if 陳述句中重定向到螢屏,它不檢查 uid 是否屬于此集合!
uj5u.com熱心網友回復:
解決方案:
if (patients.docs.isNotEmpty) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomeScreen()));
} else if (doctors.docs.isNotEmpty) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomeScreenDoc()));
} else if (admins.docs.isNotEmpty) {
Navigator.push(context,
MaterialPageRoute(builder: (context) => MainHome()))
這樣做的原因是因為admins如果有或沒有任何結果,則不會為空。該.get()函式將回傳 ua QuerySnapshot。
var admins = await FirebaseFirestore.instance
.collection('Admins')
.where('uid', isEqualTo: userid)
.get();
QuerySnapshot 有一個docs回傳檔案陣列的屬性。.isNotEmpty如果陣列不為空,將回傳 true。
可選地,你也可以使用.size
if (patients.size > 0){
}
https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/QuerySnapshot-class.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515984.html
標籤:Google Cloud Collective 扑火力基地镖firebase 身份验证
