gpt4 book ai didi

firebase - Flutter Firebase Cloud Firestore 通过 ID 获取文档列表流

转载 作者:行者123 更新时间:2023-12-05 04:44:36 25 4
gpt4 key购买 nike

大家好,我有两个顶级集合,一个用户集合和一个选项卡集合。在每个用户文档中,我都有一个文档 ID 数组字段,数组中的每个元素代表选项卡集合中的一个文档(有点像该文档的引用或指针),我想听取实时变化users/document 与 ID 列表,并监听选项卡集合中相应文档的更改。

下面是我目前的代码,它有两个问题。流在客户端不起作用 - 当我更新云 Firestore 中的文档时,我没有收到更新的快照。此外,为了让我获得 tabId 列表,我目前正在查询返回流的云 firestore,但是,whereIn 运算符只接受对象列表,所以我不确定如何处理它。

data model screenshot

     Stream<List<Tab>> get tabs {
var tabIds = _db.collection('users').doc(user.uid).snapshots().where((event) => event.get('tabs'));
return _db
.collection('tabs')
.where(FieldPath.documentId, whereIn: tabIds)
.snapshots()
.map((list) =>
list.docs.map((doc) => Tab.fromJson(doc.data())).toList());
}

最佳答案

不能直接根据文档的id来监听,可以给每个文档添加一个docId字段(取值应该是文档的id)然后监听集合这是 where 条件。

List listOfDocIds = []; // this is the list of your docIds
StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
stream: FirebaseFirestore.instance
.collection('users')
.where('docId', whereIn: listOfDocIds),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) {
if (snapshot.hasError) return Text('Something went wrong');
if (snapshot.connectionState == ConnectionState.waiting)
return CircularProgressIndicator();

List<Map<String, dynamic>> data =
snapshot.data.docs.map((e) => e.data()).toList();
print(data);
// you can build your widget here
return ListView.builder(
itemCount: data.length,
itemBuilder: (context, i) {
return ListTile(
title: Text(data[i]['name']),
// TODO: change 'name' to name of field in users document
);
},
);
},
),

关于firebase - Flutter Firebase Cloud Firestore 通过 ID 获取文档列表流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69337896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com