Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 流式传输和转换Firestore文档快照()流_Flutter_Google Cloud Firestore_Stream_Repository - Fatal编程技术网

Flutter 流式传输和转换Firestore文档快照()流

Flutter 流式传输和转换Firestore文档快照()流,flutter,google-cloud-firestore,stream,repository,Flutter,Google Cloud Firestore,Stream,Repository,我正在尝试从Firestore获取一个文档流,提取存储库中的一个字段,并将该字段流式传输到我的bloc。我使用returnorderbriefdoc.snapshots().map((snapshot){进行此操作 但是,在第一次调用时,没有执行任何内部映射指令,而是收到类型不匹配的类型“\u MapStream”不是类型“Stream”的子类型方法不依赖于我在其return语句中返回的内容以及不执行此内部代码的原因 首先,我使用Felix Angelov的Firebase身份验证ant的tod

我正在尝试从Firestore获取一个文档流,提取存储库中的一个字段,并将该字段流式传输到我的bloc。我使用
returnorderbriefdoc.snapshots().map((snapshot){
进行此操作

但是,在第一次调用时,没有执行任何内部映射指令,而是收到类型不匹配的
类型“\u MapStream”不是类型“Stream”的子类型
方法不依赖于我在其return语句中返回的内容以及不执行此内部代码的原因

首先,我使用Felix Angelov的Firebase身份验证ant的todo列表存储库函数作为蓝图:

流获取用户{
返回_firebaseAuth.authStateChanges().map((firebaseUser){
返回firebaseUser==null?User.empty:firebaseUser.toUser;
});
}
流todos(){
返回到docollection.snapshots().map((快照){
返回快照文件
.map((doc)=>Todo.fromEntity(TodoEntity.fromSnapshot(doc)))
.toList();
});
}
我的改编像这样

@覆盖
流orderBriefs(){
if(orderBriefDoc==null)
getOrderCollection();
返回OrderDefenderDoc.snapshots().map((快照){
最终tmp=快照;
印刷品(“2”);
final tmp2=snapshot.data();
印刷品(“3”);
返回snapshot.data()['orderBriefs'].map((orderBrief){
最终tmp=订单简介;
final tmp2=OrderBriefEntity.fromMap(orderBrief);
最终tmp3=OrderBrief.fromEntity(tmp2);
返回tmp3;
}).toList();
});
}
由于某些原因,第一次调用时未打印“2”和“3”,并且由于类型不匹配,应用程序执行失败。因此,在我的函数
orderBriefs()
中,我返回了
快照()的
.map()
stream。映射值,因此单个文档
snapshot
再次映射以提取
orderBriefs
字段。此字段从存储实体类
OrderBriefEntity
转换为我的业务逻辑类
OrderBrief
。转换结果是最终返回值。因此,我将使用函数
orderBriefs()
返回此转换结果的列表流。但是,会返回
\u MapStream
。为什么


PS:这是指我的,但角度稍有不同,因此,我最终找到了一种流式传输Firestore单个文档的方法。我终于有了查找流式传输文档的想法,并在那里找到了一个工作示例。为什么它不能像Felix那样仅使用map方法,不知道。尽管如此,我仍然遵循他的pattern将快照转换为“实体”,然后进一步转换为bloc和ui使用的数据结构

最后,我需要对一个文档的单个字段(嵌套数组)进行流式处理,然后对整个文档进行流式处理

(1) 流式传输文档的字段

@覆盖
Stream orderBriefs()异步*{
if(orderBriefDoc==null)
getOrderCollection();
Stream source=orderBriefDoc.snapshots();
等待(源中的var快照){
最终列表returnVal=snapshot.data()['orderBriefs'].map((orderBrief){
返回OrderBrief.fromtentity(OrderBriefEntity.fromMap(OrderBrief));
}).toList();
收益率;
}
}
(2) 流式传输文档及其所有字段

@覆盖
流orderStream(字符串orderId)异步*{
Stream source=orderBriefDoc.collection('orders').doc(orderId.snapshots();
等待(源中的var快照){
final Order returnVal=Order.fromEntity(OrderEntity.fromSnapshot(snapshot));
收益率;
}
}
如何巧妙地将其与集群中的侦听器集成,您将在at bloclibrary中找到