如何使用开关映射或其他更好的方法替换RxDart中的值

如何使用开关映射或其他更好的方法替换RxDart中的值,dart,rxdart,Dart,Rxdart,我收集了一些聊天室的信息。大概是这样的: { chatroomid: 59, members: [2,3] } { chatroomid: 59, members: [{ id: 2, username: Johndoe1 }, { id: 3, username: Jennydoe1 }] } 现在我想做的是,获取集合流,在这个过程中,能够使用基于成员id的相应firestore文档替换成员字符串id 最终结果应该如下所示: { chatroomid: 59,

我收集了一些聊天室的信息。大概是这样的:

{
  chatroomid: 59,
  members: [2,3]
}
{
chatroomid: 59,
members: [{
  id: 2,
  username: Johndoe1
},
{
  id: 3,
  username: Jennydoe1
}]
}
现在我想做的是,获取集合流,在这个过程中,能够使用基于成员id的相应firestore文档替换成员字符串id

最终结果应该如下所示:

{
  chatroomid: 59,
  members: [2,3]
}
{
chatroomid: 59,
members: [{
  id: 2,
  username: Johndoe1
},
{
  id: 3,
  username: Jennydoe1
}]
}
Dart RxDart是否可以实现这一点? 尝试这样的方法失败了:

  getChatroomStream(chatroomid)
  .switchMap((i) {
    return Stream.value(i.members.map((e) => i.members.add(Document(path: 'Global.userRef/$e').streamData())));
  })
  
  .listen((event) {print(event);}); 
[VERBOSE-2:ui\u dart\u state.cc(177)]未处理的异常:并发 迭代期间的修改:的实例 “MappedListIterable”。 #0 ListIterator.moveNext(dart:_internal/iterable.dart:337:7)

类成员信息{
最终int id;
最后一个字符串?用户名;
最终bool卸载;
}
教室{
最终int聊天室id;
最后成员名单;
}
有会员信息的教室{
最终int聊天室id;
最后清单信息;
factory Room WithMemberInfos.首字母(房间){
会员信息返回房间(
聊天室小姐,
会议室成员
.map((id)=>MemberInfo(id,null,true))
.toList(可增长:false)
);
}
RoomWithMemberInfo withInfo(MemberInfo信息){
会员信息返回房间(
聊天室小姐,
信息
.map((e)=>e.id==info.id?MemberInfo(e.id,info.name,false):e)
.toList(可增长:false)
);
}
}
流getMemberInfo(int id){…}
getChatroomStream()
.开关图((房间){
最终首字母=RoomWithMemberInfos.首字母(room);
回流
.fromIterable(房间.成员)
.flatMap(getMemberInfo)
.扫描(
(acc,info)=>acc!。withInfo(info),
首字母,
)
.startWith(首字母);
});
类成员信息{
最终int id;
最后一个字符串?用户名;
最终bool卸载;
}
教室{
最终int聊天室id;
最后成员名单;
}
有会员信息的教室{
最终int聊天室id;
最后清单信息;
factory Room WithMemberInfos.首字母(房间){
会员信息返回房间(
聊天室小姐,
会议室成员
.map((id)=>MemberInfo(id,null,true))
.toList(可增长:false)
);
}
RoomWithMemberInfo withInfo(MemberInfo信息){
会员信息返回房间(
聊天室小姐,
信息
.map((e)=>e.id==info.id?MemberInfo(e.id,info.name,false):e)
.toList(可增长:false)
);
}
}
流getMemberInfo(int id){…}
getChatroomStream()
.开关图((房间){
最终首字母=RoomWithMemberInfos.首字母(room);
回流
.fromIterable(房间.成员)
.flatMap(getMemberInfo)
.扫描(
(acc,info)=>acc!。withInfo(info),
首字母,
)
.startWith(首字母);
});