I have an example very similar to the firestore example: 

```
GoogleSignIn _googleSignIn = new GoogleSignIn(
  scopes: <String>[
    'email',
    'https://www.googleapis.com/auth/contacts.readonly',
  ],
);
final FirebaseAuth _auth = FirebaseAuth.instance;

void main() {
  final router = new Router();
  Application.router = router;
  Routes.configureRoutes(Application.router);
  runApp(
    new MaterialApp(
      title: 'My Recipts',
      home: new HomePage(),
    ),
  );
}

class HomePage extends StatefulWidget {
  @override
  State createState() => new HomePageState();
}

class HomePageState extends State<HomePage> {
  GoogleSignInAccount _currentUser;

  @override
  void initState() {
    super.initState();
    FirebaseDatabase.instance.setPersistenceEnabled(true);
    FirebaseDatabase.instance.setPersistenceCacheSizeBytes(10000000);

    _googleSignIn.signInSilently().then((account){
      account.authentication.then((authentication) async{
        final FirebaseUser user = await _auth.signInWithGoogle(
          accessToken: authentication.accessToken,
          idToken: authentication.idToken,
        );
        Application.userid = user.uid;
        Application.user = user;
        Application.account = account;
        createUserBuckets(user.uid);
      });
      setState(() {
        _currentUser = account;
      });
    });

  }

  Future<Null> _handleSignIn() async {
    try {
      final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
      final GoogleSignInAuthentication googleAuth =
      await googleUser.authentication;
      final FirebaseUser user = await _auth.signInWithGoogle(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );
      Application.userid = user.uid;
      createUserBuckets(user.uid);
    } catch (error) {
      print(error);
    }
  }

  Widget _buildBody(BuildContext context) {
    if (_currentUser != null) {
      return new Recieptlist();
    } else {
      return new Column(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: <Widget>[
          const Text("You are not currently signed in."),
          new RaisedButton(
            child: const Text('SIGN IN'),
            onPressed: _handleSignIn,
          ),
        ],
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: const Text('My Recipts'),
          leading: _currentUser == null ? null : new GoogleUserCircleAvatar(
            identity: _currentUser,
          ),
      ),
      body: new ConstrainedBox(
        constraints: const BoxConstraints.expand(),
        child: _buildBody(context),
      ),
      floatingActionButton: new FloatingActionButton(
          child: new Icon(
            Icons.add,),
          onPressed: _addDocument),
    );
  }

  void _addDocument() {
    Application.router.navigateTo(context, "/new_document");
  }

}

class Recieptlist extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance
            .collection('users')
            .document(Application.userid)
            .getCollection("documents")
            .snapshots,
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {

          if (snapshot == null || !snapshot.hasData) {
            return const Text('No documents yet');
          }
          print("snapshot has ${snapshot.data.documents.length} members");
          return new ListView(
            children: snapshot.data.documents.map((DocumentSnapshot document) {
              return new ListTile(
                title: new Text(document['id']),
              );
            }).toList(),
          );
        }
    );
  }
}

```

The problem is, first pass of rendering has snapshot null, then it gets a snapshot, with hasData equal to true, but it reports number of documents zero , which is incorrect.

If I trigger render again, by navigating back and forth, or hot reload, it fetches the data correctly.