Вы можете проверить метод combineLatest()
для класса Observable
. Он объединяет данные потоки в одну наблюдаемую последовательность с помощью функции объединения, так что полученная наблюдаемая не будет излучать, если все потоки не выпустили хотя бы один элемент.
Существует множество combineLatest()
методов. Но так как у вас есть 3 потока, вы можете использовать combineLatest3()
.
Пример -
Observable.combineLatest3(
new Observable.just("a"),
new Observable.just("b"),
new Observable.fromIterable(["c", "c"]),
(a, b, c) => a + b + c)
.listen(print); //prints "abc", "abc"
Вы можете проверить эту ссылку для получения дополнительной информации.
ОБНОВЛЕНИЕ -
Вы можете обратиться к приведенному ниже примеру использования функции в вашем коде.
Observable<String> get name => _name.stream.transform(_validateName);
Observable<File> get picture => _picture.stream;
Observable<String> get eventDescription => _description.stream.transform(_validateMessage);
//Add this line to combine your Streams
Observable<bool> readyToSubmit => Observable.combineLatest3(name, picture, eventdescription, (value1, value2, value3) => true);
//We simply return true from the combiner function since we don't want to perform any operation on the Streams when combining.
Я использовал bool
тип Observable
только для примера. Вы можете изменить тип на Map<String, dynamic>' and add the Stream values into the
Карта if you want to access the data from all three streams. And in your
StreamBuilder` виджет, который вы можете использовать -
StreamBuilder(
stream: _bloc.readyToSubmit,
builder: //Your builder function here
)
Надеюсь, это поможет!