![](/img/trans.png)
[英]How do I use StreamBuilder to display the data from ONE specific document in my Cloud firestore database?
[英]Flutter Firebase StreamBuilder how to use only one specific document
我的代碼運行正常,但運行 4 次時出現問題,我認為問題出在文檔編號上。 在 Firebase Firestore 中,我有 4 個文檔,但我一次只需要使用一個。 那么我該怎么做。 我找到了一些解決方案,但所有解決方案都是舊的,它們的代碼不起作用,似乎已更改。 這是完整的代碼:
Widget build(BuildContext context) {
final Stream<QuerySnapshot> _usersStream =
FirebaseFirestore.instance.collection('catanR').snapshots();
height = MediaQuery.of(context).size.height;
width = MediaQuery.of(context).size.width;
return StreamBuilder<QuerySnapshot>(
stream: _usersStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return Container(
color: Colors.white,
child: Center(
child: Text(
'Something went wrong',
style: TextStyle(fontFamily: 'Cairo', fontSize: 24),
),
),
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Container(
color: Colors.white,
child: Center(
child: CircularProgressIndicator(),
),
);
}
return Material(
child: ListView(
children: snapshot.data!.docs.map((DocumentSnapshot document) {
Map<String, dynamic> data =
document.data() as Map<String, dynamic>;
return Container( // THİS PART DOESN'T MATTER
實際的Output是這樣的:
但是,當我因 StreamBuilder 和文檔編號而滾動時,會出現該屏幕數。 正如您猜到的那樣,我只需要一個而無需滾動。
如果你想構建一次,不要返回 ListView 及其從集合文檔生成的子項,只需返回包含你要使用的 data[index] 的容器。
null safety
更新 2023 @override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
stream: FirebaseFirestore
.instance
.collection('users')
.doc(FirebaseAuth.instance.currentUser!.uid) // 👈 Your document id change accordingly
.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Text("Loading");
}
Map<String, dynamic> data =
snapshot.data!.data()! as Map<String, dynamic>;
return Text(data['fullName']); // 👈 your valid data here
},
),
),
);
}
另請參閱: How to use StreamBuilder
and FutureBuilder
for single and multiple documents
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.