title: Flutter merge two firestore streams into a single stream
body: <p>I simply want to perform an 'OR' operation and get the both results of two queries into one stream.</p>
  
  <p>Here's my code with a single stream</p>
  
  <pre><code> StreamBuilder(
      stream: Firestore.instance
          .collection('list')
          .where('id', isEqualTo: 'false')
          .orderBy('timestamp')
          .snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: &lt;Widget&gt;[
              Center(
                child: CircularProgressIndicator(),
              )
            ],
          );
        if (snapshot.data.documents.length == 0)
          return const Center(
            child: Text(
              "Not Available",
              style: TextStyle(fontSize: 30.0, color: Colors.grey),
            ),
          );
        return ListView.builder(
          padding: EdgeInsets.all(5.0),
          key: Key(randomString(20)),
          itemCount: snapshot.data.documents.length,
          itemBuilder: (BuildContext context, int index) {
            return ListCard(snapshot.data.documents[index]);
          },
        );
      }),
  </code></pre>
  
  <p>Instead of a single stream now I want to feed two stream to the same stream builder.</p>
  
  <p>I tried StreamGroup but it's not working since Widgets rebuild</p>
  
  <pre><code>StreamGroup.merge([streamOne, streamTwo]).asBroadcastStream();
  </code></pre>
  
  <p>I tried followed method also</p>
  
  <pre><code> Stream&lt;List&lt;DocumentSnapshot&gt;&gt; searchResult()  {
  List&lt;Stream&lt;List&lt;DocumentSnapshot&gt;&gt;&gt; streamList = [];
  
  Firestore.instance
      .collection('room-list')
      .where('id', isEqualTo: 'false')
      .snapshots()
      .forEach((snap) {
    streamList.add(Observable.just(snap.documents));
  });
  
  Firestore.instance
      .collection('room-list')
      .where('id', isEqualTo: 'pending')
      .snapshots()
      .forEach((snap) {
    streamList.add(Observable.just(snap.documents));
  });
  
  var x = Observable.merge(streamList)
      .scan&lt;List&lt;DocumentSnapshot&gt;&gt;((acc, curr, i) {
    return acc ?? &lt;DocumentSnapshot&gt;[]
      ..addAll(curr);
  });
  return x;
  }
  </code></pre>
  
  <p>Here I get the error there should be at least a single stream to merge. Its because Observable.merge(streamList) is called before items are added to streamList.</p>
  
  <p>I simply want to get the both results of two queries into one stream.</p>