StreamBuilder и AsyncSnapshot + rxdart развеваются вопрос - PullRequest
0 голосов
/ 08 октября 2018

У меня есть final _fetcher = PublishSubject<MyModel>() ; в моем компоненте блока.Вот структура MyModel:

MyModel { List<MyObjects> _objects = []; 
List<MyObjects> get allObjects => _objects; }

и в блоке есть

Observable<MyModel> get myObjects => _fetcher.stream;

.

У меня две страницы, первый отображает список MyObjects внутри Listview.builder, а второй отображает выбранные MyObject данные.
Я пытаюсь получить данные из myObjects, используя StreamBuilder.
На первой странице все объекты отображаются идеально.Но когда я открываю страницу с выбранным объектом, у моего AsyncSnapshot внутри StreamBuilder всегда connections.state ожидания, хотя у меня есть данные в потоке.
Что я делаю не так?

1 Ответ

0 голосов
/ 08 октября 2018

Наличие данных не означает, что у вас всегда есть доступ к ним.

По умолчанию потоки (и темы) не сохраняют данные, которые они получили ранее.Так что, если вы опаздываете на вечеринку, то извините, но данных нет.

Для решения этой проблемы rxdart представляет ReplaySubject и BehaviorSubject.Оба используются так, чтобы поздние слушатели могли все еще захватить последние несколько событий.ReplaySubject будет отслеживать последние N, в то время как BehaviorSubject будет сохранять только последний.

Использование BehaviorSubject вместо PublishSubject должно сработать

...