Flutter Firestore получает с помощью orderBy работает нормально, но при отображении список перемешивается - PullRequest
0 голосов
/ 19 октября 2019

Я использую Flutterfire и «cloud_firestore» для извлечения данных из 2 коллекций пожарных хранилищ.

Вот моя логика:

  • Сначала я получаю список встреч (из встречсбор) для врача, и я пытаюсь заказать по метке времени, используемой Firestore
  • . Затем я перебираю этот список назначений и для каждого приема извлекаю данные пациента из отдельной подборки (сбор пациентов)
  • Затем я добавляю каждую встречу в список и отображаю этот список в пользовательском интерфейсе.

Ошибка, которую я вижу, состоит в том, что список отображаемых встреч перемешивается. Я попытался отладить и посмотреть фактические данные, которые были получены, и кажется, что orderBy, кажется, работает, и снимок, полученный из firestore, имеет назначения в правильном порядке. Когда я выполняю дальнейшую обработку, он перемешивается.

Попробовав несколько вещей, я заметил, что если я не попытаюсь получить сведения о пациенте из коллекции пациента , и еслиВместо этого я получаю информацию о пациенте из локальной переменной, и я не вижу, чтобы эта проблема возникала. Отображаемый список встреч точно соответствует списку, который загружен и ведет себя, как ожидалось. Кажется, проблема возникает только тогда, когда я проверяю в пожарном депо дважды (один для назначений и второй раз для сведений о пациенте).

Вот фрагмент:

 Future<Patient> fetchPatientFromFirebase(String patientId) async {
    print("fetchPatientFromFirebase called");
    var patientsCollection = Firestore.instance.collection('patients');
    var patientSnapshot = await patientsCollection.document(patientId).get();
    return Patient(
        age: patientSnapshot['age'],
        Firstname: patientSnapshot['FirstName'],
        id: patientId,
        LastName: patientSnapshot['LastName'],
        sex: patientSnapshot['sex'] == "Male" ? Sex.Male : Sex.Female,
        father: Parent(

        ),
        mother: Parent(

        ));
  }

  Future<void> fetchAppointmentsFromFirebase() async {
    var appointmentsCollection = Firestore.instance.collection('appointments');
    fetchedAppointmentList.clear();
    notifyListeners();

    var apps = await appointmentsCollection
        .orderBy('firebaseTimeStamp')
        .getDocuments();
    apps.documents.forEach((appointment) async {
      var fetchedPatient = await fetchPatientFromFirebase(appointment['patient']);
      // print(
      //     "Appoinments fetcheded and added ${appointment['patient'].toString()}. Patient is ${ds['FirstName']}");
      fetchedAppointmentList.add(Appointment(
        appointmentId: appointment['appointmentId'],
        status: AppointmentStatus.values[appointment['status']],
        // status: appointment['status'] == "Scheduled"
        //     ? AppointmentStatus.Scheduled
        //     : AppointmentStatus.Completed,
        appointmentDateTime: DateTime.parse(appointment['appointmentDateTime']),
        patient: fetchedPatient,
       //      patient: localPatients
        //       .firstWhere((patient) => patient.id == appointment['patient']),
      ));

      // appointmentsCollection.snapshots().listen((data) {
      //   data.documents.forEach((doc) => print(doc["title"]));
      // });
    });
    notifyListeners();
  }
}

Вот как выглядит пожарное депокак:

Firestore appointments collection

Я хотел бы услышать любые предложения о том, как это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...