我想userName從每個用戶登錄的 firebase firestore 中檢索。所以我不想使用來自 firebase 的 userID 檢索用戶資料并顯示它。
我在下面附上了我當前的代碼。
我如何調整下面的代碼以userName使用user_ID作為主鍵從 firestore獲取?
當前代碼:
類 GetUserName 擴展 StatelessWidget {
final String documentId;
GetUserName(this.documentId);
@override
Widget build(BuildContext context) {
CollectionReference users = FirebaseFirestore.instance.collection('users');
return FutureBuilder<DocumentSnapshot>(
future: users.doc(documentId).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return Text("Something went wrong");
}
if (snapshot.hasData && !snapshot.data!.exists) {
return Text("Document does not exist");
}
if (snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> data =
snapshot.data!.data() as Map<String, dynamic>;
return Text("Hello, ${data['userName']}");
}
return Text("loading");
},
);
}
}
先感謝您 :)
uj5u.com熱心網友回復:
您需要使用StreamBuilderon `` 來處理當前用戶,如下所示:
return StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.active) {
return Center(child: CircularProgressIndicator()); // ?? user is loading
}
final user = snapshot.data;
final uid = user.uid; // ?? get the UID
if (user != null) {
print(user);
CollectionReference users = FirebaseFirestore.instance.collection('users');
return FutureBuilder<DocumentSnapshot>(
future: users.doc(uid).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return Text("Something went wrong");
}
if (snapshot.hasData && !snapshot.data!.exists) {
return Text("Document does not exist");
}
if (snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> data = snapshot.data!.data() as Map<String, dynamic>;
return Text("Hello, ${data['userName']}");
}
return Text("loading");
},
);
} else {
return Text("user is not logged in");
}
},
在做這樣的事情時,我總是把 FlutterFire 檔案放在手邊
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/391689.html
標籤:火力基地 扑 镖 谷歌云firestore
