В течение нескольких дней я пытался найти ответ на этот вопрос. Многие примеры сбивают меня с толку, и я действительно не понимаю, как их реализовать с помощью rxdart, несмотря на то, что они выглядят очень просто.
Я пытаюсь объединить 4 коллекции из Firestore для использования в одном StreamBuilder.
Observable<QuerySnapshot> firstList = Firestore.instance.collection(bla).snapshots();
Observable<QuerySnapshot> secondList = Firestore.instance.collection(blabla).snapshots();
Observable<QuerySnapshot> thirdList= Firestore.instance.collection(blablabla).snapshots();
Observable<QuerySnapshot> fourthList= Firestore.instance.collection(blablablabla).snapshots();
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ Я изменил с Observable на Stream, как это было до того, как я попытался использовать rxdart.
Stream<QuerySnapshot> firstList = Firestore.instance.collection(bla).snapshots();
Stream<QuerySnapshot> secondList = Firestore.instance.collection(blabla).snapshots();
Stream<QuerySnapshot> thirdList= Firestore.instance.collection(blablabla).snapshots();
Stream<QuerySnapshot> fourthList= Firestore.instance.collection(blablablabla).snapshots();
И я использую rxdart для их объединения:
Observable<SomeList> allList = Observable.combineLatest4(
firstList,
secondList,
thirdList,
fourthList, (a, b, c, d) => SomeList(a, b, c, d));
Вот класс, который я использую выше:
class SomeList{
QuerySnapshot firstList;
QuerySnapshot secondList;
QuerySnapshot thirdList;
QuerySnapshot fourthList;
SomeList(this.firstList, this.secondList, this.thirdList,
this.fourthList);
}
Внутри метода сборки я возвращаю StreamBuilderследующим образом:
Widget build(BuildContext context) {
return Scaffold(
appBar: _bla(),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
return new StreamBuilder(
stream: allList, // here is my main issue
...
),
]
),
),
);
}
Когда я запускаю код, я получаю исключение:
Class 'SomeList' has no instance getter 'documents'.
Receiver: Instance of 'SomeList'
Tried calling: documents
type '_BroadcastStream<QuerySnapshot>' is not a subtype of type 'Observable<QuerySnapshot>'
Поэтому я попытался удалить вызов asBroadcastStream () при инициализации allList, ноошибка такая же. Я посмотрел эти примеры перед тем, как опубликовать мою проблему:
Обновление потоков на основе фильтров в Dart / Flutter
Объединение потоков Firestore с использованием rxDart
https://www.burkharts.net/apps/blog/rxdart-magical-transformations-of-streams/
https://medium.com/@ayushpguptaapg/using-streams-in-flutter-62fed41662e4
Как правильно объединить эти потоки в один поток, а затем использовать в StreamBuilder? Не могли бы вы привести небольшой пример?
Спасибо!