如何在Flutter中使用StreamBuilder <querysnapshot>从Firestore中添加/获取数据?

时间:2019-02-24 03:58:06

标签: flutter google-cloud-firestore

我想像这样在我的Firestore中添加数据

->用户(集合)->用户ID(文档)->朋友(集合)

我想从朋友收藏中添加/获取数据

这是我的代码:

 Future<void> _getUserDoc() async {
    final FirebaseAuth _auth = FirebaseAuth.instance;
    final Firestore _firestore = Firestore.instance;

    FirebaseUser user = await _auth.currentUser();
    DocumentReference ref = _firestore.collection('users').document(user.uid);
 }


Widget _buildBody(BuildContext context) {
  return StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance
        .collection('users')
        .document()
        .collection('friends')
        .snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData)
        return Center(
            child: CircularProgressIndicator(
          backgroundColor: Colors.deepPurple,
        ));

      return _buildList(context, snapshot.data.documents);
    },
  );
}

在_buildbody小部件中,我如何使用user.uid来获取好友集合中的数据。

预先感谢

1 个答案:

答案 0 :(得分:0)

如果您的窗口小部件是有状态窗口小部件,那么您可以在窗口小部件状态下获取用户文档引用,并使用相同的ref来获取朋友收集数据,例如:

 DocumentReference userRef;
 @override
 initState(){ 
  super.initState();
  _getUserDoc();
 } 

 //Call this method from initState()
 Future<void> _getUserDoc() async {
    final FirebaseAuth _auth = FirebaseAuth.instance;
    final Firestore _firestore = Firestore.instance;

    FirebaseUser user = await _auth.currentUser();
    setState((){
      userRef = _firestore.collection('users').document(user.uid);
    });
 }


Widget _buildBody(BuildContext context) {
  if(userRef == null) {
  CircularProgressIndicator(
          backgroundColor: Colors.deepPurple,
        ));
  }

  return StreamBuilder<QuerySnapshot>(
        stream: userRef
        .collection('friends')
        .snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData)
        return Center(
            child: CircularProgressIndicator(
          backgroundColor: Colors.deepPurple,
        ));

      return _buildList(context, snapshot.data.documents);
    },
  );
}

P.S。 :只需确保在调用StreamBuilder函数“ _buildBody”之前,userRef不为空

相关问题