Я пытаюсь получить 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();
});
}
Что здесь не так?