Подписка на поток не отслеживает изменения во флаттере - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь получить Firestore документы по шаблону BLo C. Есть два события: одно выбирает все документы, другое выбирает документы на основе запроса. Вот код для двух событий:

  Stream<JobFeedState> _mapFetchAllJobPostsToState(
      FetchAllJobPosts event) async* {
    yield LoadingJobPosts();
    try {
      _jobsSubscription?.cancel();
      _jobsSubscription = _jobsRepository.getAllTheJobsPosted().listen((jobs) {
        add(JobPostsRefreshed(jobs: jobs));
      });
    } catch (e) {
      yield Error(message: e.toString());
    }
  }

  Stream<JobFeedState> _mapFetchJobPostsForLocation(
      FetchJobPostsForLocation event) async* {
    yield LoadingJobPosts();
    try {
      _jobsSubscription?.cancel();
      _jobsInLocationsubscription?.cancel();
      _jobsInLocationsubscription =
          _jobsRepository.getJobsInALocation(event.location.country).listen((jobs) {
        add(JobPostsRefreshed(jobs: jobs));
      });
    } catch (e) {
      yield Error(message: e.toString());
    }
  }

_mapFetchAllJobPostsToState() работает должным образом. Но другой, _mapFetchJobPostsForLocation(), сначала выбирает данные, но потом не показывает изменений в потоке. Вот функция, которая извлекает данные на основе запроса:

  // getJobsInALocation()
  Stream<List<JobPostDocumentModel>> getJobsInALocation(String location) {
    var collectionGroup =
        Firestore.instance.collectionGroup(AppStringConstants.posts);
    return collectionGroup
        .where(AppStringConstants.country, isEqualTo: location)
        .snapshots()
        .map((snapshot) {
      return snapshot.documents.map((docSnapshot) {
        DocumentReference documentReference = docSnapshot.reference;
        JobPostModel jobPostModel = JobPostModel.fromSnapshot(docSnapshot);
        JobPostDocumentModel jobPostDocumentModel = JobPostDocumentModel(
          documentReference: documentReference,
          jobPostModel: jobPostModel,
        );
        return jobPostDocumentModel;
      }).toList();
    });
  }

Что здесь не так?

...