У меня ниже структура хранилища огня и метод получения пользовательского фида из БД.
Мне нужно связать свой поток, например
Сначала весь идентификатор канала из коллекции User / FeedIDs
Затем для каждого идентификатора канала получите документы с подробностями канала и вернитесь к их списку.
Я мог бы найти способ решить эту проблему, потому что toList()
не работает или я что-то делаю не так.
// User Collection
- User
- RandomDocumentID
- Feed
- FeedIDasDocumentID
- field1
- field2
.
.
// Feed Collection
- Feed
- RandomDocumentID
- field1
- field2
.
.
// Method in my repository to get feed for User
Observable<Feed> getCurrentUserFeed(String uid) {
return Observable(Firestore.instance
.collection('User')
.document(uid)
.collection("FeedIDs")
.snapshots()
.expand((snapshots) => snapshots.documents)
.map((document) => UserFeed.fromMap(document.data))
)
.flatMap((userFeed) => Firestore.instance
.collection("Feed")
.document(userFeed.id)
.snapshots()
)
.map((document) => Feed.fromMap(document.data));
// ????
// I tried to put .toList() and of the stream but it is not working,
// i wanna return List<Feed> instead of every single feed object
}
// in my BLoC
// I had to do that because I could acquire to get streams elements as a list
//
List<Feed> feedList = List();
FirebaseUser user = await _feedRepository.getFirebaseUser();
_feedRepository.getCurrentUserFeed(user.uid).listen((feed) {
feedList.add(feed);
dispatch(UserFeedResultEvent(feedList));
};
Если есть какой-либо другой подход к цепочке, мы будем очень признательны за его использование. Спасибо
stream.map
, который является ответом на цепочку вычислений для элементов в Stream. Я думаю, ваш вопрос лучше сформулировать так: Почему поток из Firestore не генерирует событие done? Я думаю, что потокsnapshots
предназначен, чтобы никогда не заканчиваться, потому что он сигнализирует, когда коллекция получает обновления. Возможно, вы захотите.snapshots().first()
получить список текущих документов. - person Nate Bosch   schedule 28.12.2018.toList()
никогда не завершится, заключается в отсутствии события done..single()
тоже не будет полным, как я ожидал..first
должен быть завершен. - person Nate Bosch   schedule 02.01.2019