Flutter如何将获取Firestore集合文档ID的Future改为Stream返回
改造后的实现代码
Stream<List<String>> getFollowingUidList(String uid) { return FirebaseFirestore.instance .collection('following') .doc(uid) .collection('user_following') .snapshots() .map((querySnapshot) { return querySnapshot.docs.map((snapshot) => snapshot.id).toList(); }); }
改动说明
- 移除了原方法的
async关键字,无需再await单次请求结果,直接返回Stream对象即可 - 将原单次拉取数据的
get()方法替换为snapshots()方法,该方法会自动监听对应集合的变更(新增/删除/修改关注用户),实时推送最新的快照数据 - 通过Stream的
map方法对每次推送的QuerySnapshot做转换,转换逻辑和原有逻辑完全一致,仅提取所有文档的ID组成列表返回
使用说明
你可以直接配合StreamBuilder组件监听该流实现UI自动更新,也可以手动调用listen方法监听数据变更。和原有Future方法的单次查询逻辑不同,该Stream会持续推送最新的关注列表,直到你主动取消监听为止。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

