Я пытаюсь создать приложение посещаемости, поэтому хочу получить курсы, на которые зарегистрированы студенты. Класс ученика выглядит примерно так:

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 содержат идентификатор документа преподавателя, чей это курс, и идентификатор документа курса (поскольку один студент, очевидно, будет посещать занятия у разных преподавателей)

Теперь, используя эти два поля, я хочу получить документы курсов, создать объект пользовательского класса Course, а затем добавить этот объект в List, который будет возвращен, чтобы его можно было отображается в графическом интерфейсе.

Но я получаю это исключение, тогда как у меня явно есть данные в объекте.

Изображение сообщения об исключении можно увидеть здесь

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
QasimSiddiqui 14 Июн 2020 в 13:56

1 ответ

Лучший ответ

Возможно, вам потребуется создать объект List вместо просто указателя.

List<Course> courseList = new List();

источник

1
Juancki 16 Июн 2020 в 07:44