简体   繁体   中英

Flutter Provider - StreamProvider depending on another StreamProvider

TLDR How to use data from one stream provider to call another?

Background of the Problem

Hello! I have this Firebase Realtime Database Structure

用户数据库结构。

Each user's Group IDs are stored here. They can be accessed to then query the following 'Groups' Json tree.

群组数据库结构

Here there is all the data for a group, which multiple users can access. The structure is like this to avoid data redundancy.

Problem

I am using the Provider package. To get the user data, it works like a charm:

  1. I use a Stream Provider
  2. I query the database with an onValue function --> Stream.
  3. I map the data from that Stream to a class and transform it to that class's structure using fromMap() factory function
Stream<FrediUser> currentUserDataStream() {
    var userRef = 
    FirebaseDatabase.instance.reference().child('Users').
    child(currentUserID!);
    return userRef.onValue.map((event) => 
    FrediUser.fromMap(event.snapshot.value));
}

That works if I have to access the User map and its nested children. But as illustrated in the example above, what happens if I have to access the User map first and then the Groups map? I want to do all of this using stream providers.

you can do it by using the first stream as dependency of the second like below

StreamProvider<FrediUser>(
      create: (context) => firstStream(),
      initialData: 'initialData',
      builder: (context, child) {
        return StreamProvider(
          create: (context) => secondStream(
              context.watch<FrediUser>(),
          ),
          initialData: 'initialData',
          child: child,
        );
      },
    )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM