如何从Firebase中的不同集合中获取文档并将其添加到单个列表中以流形式返回?

时间:2020-06-14 10:56:28

标签: firebase flutter dart google-cloud-firestore

我正在尝试创建一个出勤应用程序,因此我想获得注册学生的课程。学生的班级看起来像这样:

class Student {
  final String name;
  final String email;
  final String number;
  final String regNo;
  List<CourseIDAndInstructorID> courses;

  Student({this.name, this.email, this.number, this.regNo});
}

名为List的课程包含其所在课程的讲师的文档ID和课程文档的文档ID。(因为一个学生显然要从其他讲师那里上课)

现在使用这两个字段,我想获取课程的文档,创建自定义类Course的对象,然后将此对象添加到List,将其返回以便它可以显示在GUI上。

但是我得到了这个异常,而我显然在对象中有数据。

The image of the Exception Message can be seen here

final CollectionReference _instructorCollection =
    Firestore.instance.collection('instructors');

final CollectionReference _studentCollection =
    Firestore.instance.collection('students');

Stream<List<Course>> _getStudentCourses() async* {
    List<Course> courseList;

    DocumentSnapshot stdDoc = await _studentCollection.document(uid).get();
    Student _student = new Student.fromSnapshot(stdDoc);

    if (_student.courses.length == 0) {
      return; //TODO add appropriate return type
    } else {
      int len = _student.courses.length;
      while (len != 0) {
        len--;
        DocumentSnapshot snapshot = await _instructorCollection
            .document(_student.courses[len].instructorUID)
            .collection('courses')
            .document(_student.courses[len].courseID)
            .get();
        print(snapshot.data);
        Course course = new Course.fromSnapshot(snapshot);
        courseList.add(course);
        yield courseList;
      }
    }
  }

有人可以告诉我,我做错了什么或者我怎么做? 如果问题中缺少某些内容,请告诉我,以便我可以补充。

1 个答案:

答案 0 :(得分:0)

您可能需要创建List对象,而不只是指针。

List<Course> courseList = new List();

source