Firebase 如何从子集合文档firestore(Flatter)获取数据

Firebase 如何从子集合文档firestore(Flatter)获取数据,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我在firebase收集数据。 它有用户数据文档,每个文档都包含一个名为GPA的集合。 在GPA集合中有8个文档,我想从其中一个名为sem1的文档中获取数据 这是我的getData函数。但它不起作用 请给我一个解决办法 _getData() async { { var docID; var firebaseUser = await FirebaseAuth.instance.currentUser(); final databaseReference

我在firebase收集数据。 它有用户数据文档,每个文档都包含一个名为GPA的集合。 在GPA集合中有8个文档,我想从其中一个名为sem1的文档中获取数据 这是我的getData函数。但它不起作用 请给我一个解决办法

_getData() async {
    {
      var docID;
      var firebaseUser = await FirebaseAuth.instance.currentUser();
      final databaseReference = Firestore.instance;
      databaseReference
          .collection("users")
          .where('uid', isEqualTo: firebaseUser.uid)
          .getDocuments()
          .then((querySnapshot) {
        docID = querySnapshot.documents[0].reference.documentID;
      });

      var query = databaseReference
          .collection('users')
          .document(docID)
          .collection('GPA')
          .document(sem1)
          .get()
          .then((DocumentSnapshot ds) {
        print(ds.data);
      });
    }
  }


问题是,您正在尝试在填充
docID
之前使用它,因为
getDocuments()
是一个异步调用,所以您要么等待
来填充
docID
,要么在
getDocuments()内执行所有操作。然后()
。我推荐后者,它可以是这样的:

_getData() async {
    var docID;
    var query;
    var firebaseUser = await FirebaseAuth.instance.currentUser();
    final databaseReference = Firestore.instance;
    databaseReference
        .collection("users")
        .where('uid', isEqualTo: firebaseUser.uid)
        .getDocuments()
        .then((querySnapshot) {
            docID = querySnapshot.documents[0].reference.documentID;
            query = databaseReference
                        .collection('users')
                        .document(docID)
                        .collection('GPA')
                        .document(sem1)
                        .get()
                        .then((DocumentSnapshot ds) {
                            print(ds.data);
                        });
        });
}