RxDart fetch item for every item in stream and join results


I have a simple data class that represents a task:

class Task {
   String name;
   String userId;

And a stream of tasks:

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

For every task I want to also fetch a user that is assigned to it:

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

And finally combine a task with a user to create an object that contains user’s data as well as task’s data. I was playing with zip function as well as flatMap but couldn’t find a working solution. Any help would be appreciated.


Use Rx.forkJoinList:

class UserAndTasks {
  final User user;
  final Task task;

  UserAndTasks(this.user, this.task);

void main() {
  UsersDataSource usersDataSource;
  TaskDataSource taskDataSource;

        (tasks) => Rx.forkJoinList(tasks
            .map((task) => usersDataSource
                .map((user) => UserAndTasks(user, task)))
      .listen((List<UserAndTasks> event) => print(event));

Answered By – Petrus Nguyễn Thái Học

Answer Checked By – Marie Seifert (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *