Сохранить последнее значение потока в Dart - PullRequest
0 голосов
/ 20 декабря 2018

Я создаю приложение, используя Firestore и нижнюю панель навигации во Flutter.Проблема в том, что когда я переключаюсь между вкладками, метод сборки вызывается каждый раз.Метод сборки загружает данные из firestore.Поэтому приложение мигает, когда я переключаю вкладки (вращающаяся панель отображается очень короткое время).Я попытался исправить это, переместив поток из пожарного магазина в конструктор.Однако, поскольку поток может излучать до метода сборки, он загружается вечно.

Решением может быть сохранение последнего выданного значения.Я попытался исправить это с помощью метода shareReplay в Rx, но они еще не реализованы в RxDart.Итак, как лучше всего это реализовать?

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Используйте оператор shareValue для rxdart:

final observable = Observable(yourStream).shareValue();

Внутренне этот оператор использует BehaviorSubject.Он будет подписываться на поток, как только будет один подписчик (он будет подписываться только один раз), и отменять подписку (и удалять тему), когда больше нет подписчиков.

Также, как вы сказали, вынеобходимо создать наблюдаемое в initState или аналогичном методе (НЕ в методе build!).Наблюдаемые должны храниться в поле в State.

0 голосов
/ 22 декабря 2018

Я запустил приложение флаттера в режиме выпуска, и задержка исчезла без каких-либо изменений.

0 голосов
/ 20 декабря 2018

Вы можете посмотреть на BehaviorSubject в rxdart.Согласно документам

Последний элемент, добавленный к теме, будет отправлен всем новым слушателям темы.

...