RxDart 为流中的每个项目获取项目并加入结果

RxDart fetch item for every item in stream and join results

我有一个代表任务的简单数据class:

class Task {
   String name;
   String userId;
}

还有一系列任务:

class TaskDataSource {
   Stream<List<Task>> getAll() {
}

对于每个 task,我还想获取分配给它的 user

class UsersDataSource {
   Stream<User> getById(String userId);
}

最后将 taskuser 组合起来创建一个包含用户数据和任务数据的对象。我正在玩 zip 函数以及 flatMap 但找不到可行的解决方案。任何帮助将不胜感激。

使用Rx.forkJoinList:

class UserAndTasks {
  final User user;
  final Task task;

  UserAndTasks(this.user, this.task);
}  

void main() {
  UsersDataSource usersDataSource;
  TaskDataSource taskDataSource;

  taskDataSource
      .getAll()
      .flatMap(
        (tasks) => Rx.forkJoinList(tasks
            .map((task) => usersDataSource
                .getById(task.userId)
                .map((user) => UserAndTasks(user, task)))
            .toList()),
      )
      .listen((List<UserAndTasks> event) => print(event));
}