如何遍历Stream<List<DocumentSnapshot<Object?>>>并校验文档数据?
遍历Stream<List>并校验数据
直接通过Stream的listen方法监听数据流,在回调中遍历每个文档快照并做条件校验,示例代码如下:
// 假设你的Stream对象为streamOfDocs Stream<List<DocumentSnapshot<Object?>>> streamOfDocs = ...; // 监听Stream,处理每个批次的文档列表 final subscription = streamOfDocs.listen((docList) { // 循环遍历每个DocumentSnapshot for (final doc in docList) { final docData = doc.data(); // 自定义条件校验逻辑,示例:检查是否存在"isActive"字段且值为true if (docData != null && docData['isActive'] == true) { // 校验通过后的处理 print("文档${doc.id}符合要求"); } else { // 校验不通过的处理 print("文档${doc.id}不符合要求"); } } }); // 不再需要监听时取消订阅,避免内存泄漏 // subscription.cancel();
注意事项
- 取消订阅:在组件销毁或不再需要数据流时,务必调用
subscription.cancel()关闭订阅,防止内存泄漏。 - 空数据处理:
doc.data()可能返回null,必须先做非空判断,避免空指针异常。 - 错误处理:可以在
listen中添加onError回调处理Stream异常:
streamOfDocs.listen( (docList) { /* 遍历逻辑 */ }, onError: (err) => print("数据流出错: $err"), onDone: () => print("数据流已终止") );
内容的提问来源于stack exchange,提问作者Jack Duffy
相关产品推荐
相关产品推荐

