title: Nested FutureBuilder's snapshot that already create still there when re-visit with new query
body: <p>There is material application to query database to display items in category.</p>
  <ol>
  <li>Page [Category] - select category A (Passed parameter as category id A)</li>
  <li>Page [Items] - (Only items A was query from the database) ListView.builder display items of category A correctly</li>
  <li>Then click back</li>
  <li>Page [Category] -&gt; select category B (Passed parameter as category id B)</li>
  <li>Page [Items] -&gt; (Only items B was query from the database) ListView.builder unexpected display items of category A and B</li>
  </ol>
  <p>Note: I need calling condition future function to display items then I called FutureBuilder as nested of StreamBuilder. It's working fine until we need to have a category of item. Which leading to result of StreamBuilder can be difference. Then observed snapshot of FutureBuilder is not clean up well.</p>
  <pre><code>
  Widget _buildBody(BuildContext context) {
    return StreamBuilder&lt;QuerySnapshot&gt;(
     stream: firestoreInstance.collection('items').where(&quot;category&quot;, isEqualTo: widget.categoryId).snapshots(),  
  
     builder: (context, snapshot1) {     
       if (!snapshot1.hasData) return LinearProgressIndicator();          
       else return _buildList(context, snapshot1.data.documents);
     },   
   );
  }
  
  Widget _buildList(BuildContext context, List&lt;DocumentSnapshot&gt; docSnapshot) {
   return FutureBuilder &lt;List&lt;ItemsRecord&gt;&gt; (
        future: getDetailsOfEachItem(context, docSnapshot),
        builder: (context, snapshot2) {
           if (snapshot2.hasData == true) { 
              return new ListView.builder(
                           itemCount: snapshot2.data.length,
                           itemBuilder: (BuildContext ctxt, int index)
                           {
                             return _buildListItem(context, snapshot2.data[index]);
                           }
                          );
            }
            else
            {
               return Container(hieght: 0);
            }
         });
  }
  </code></pre>
  <p>By debugging database result of query (By StreamBuilder) items is correct. Only B available.</p>
  <pre><code>Debugging result of step above.
  snapshot1 =&gt; Category A =&gt; 15 items
  snapshot1=&gt; Category B =&gt; 6 items
  </code></pre>
  <p>But look like items A in FutureBuilder in snapshot are still exist.</p>
  <pre><code>Debugging result of step above.
  snapshot2 =&gt; Category A =&gt; 15 items
  snapshot2 =&gt; Category A &amp; B =&gt; 21 items (Unexpected !)
  </code></pre>
  <p>Please help to suggest how cloud I remove unexpected item A in snapshot2 of FutureBuilder.</p>
  <p>I try to add snapshot2.data.clear(); but seem like data is null when hasData is not true, also when ConnectionState is waiting.</p>
  <p>Try refer to snapshot2.requireData instead of snapshot2.data also same result.</p>