Hello! Использую Jetpack compose, VM -> Activity -> compose UI У меня

есть несколько StateFlow<Boolean> в VM, хранящие настройки приложения. В Activity подписываюсь на обновления через
lifecycle.repeatOnLifecycle
Проблема в том, что когда на экране с настройками жму на checkbox, меняющий значение второго StateFlow (в примере это boolean2), метод collect не срабатывает. Если поменять местами
VM.boolean1.collect
и
VM.boolean2.collect
, то не будет срабатывать collect у boolean1. Что я делаю не так? На LiveData все работает прекрасно.
Если обобщить, то сколько бы я не подписывался на обновления в StateFlow, вызываться будет только первый collect.
https://pastebin.com/Rxd8X8JY

7 ответов

20 просмотров

почему в одной корутине запускается сборка?

Alexander- Автор вопроса
Silent829
почему в одной корутине запускается сборка?

откровенно говоря, не видел в этом каких-либо проблем. У меня все было на LiveData, увидел статью, где советуют переходить на flow, перевел все так, как было, добавив lifecycleScope.launch { lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {} } Подумал, это же куча boilerplate будет, если на каждый параметр запускать корутину 🤷‍♂️ т.е. мне на каждый параметр нужно запускать корутину и будет что-то вроде этого

Alexander
screenshot откровенно говоря, не видел в этом каких-либо проб...

да, на каждую сборку флоу нужно отдельную корутину запускать

Стейт флоу не эмитит повторно ведь тот же элемент, в отличии от Лайв даты Мб в этом у тебя проблема

Alexander- Автор вопроса
Sadyk Nasrullaev
Стейт флоу не эмитит повторно ведь тот же элемент,...

я это проверял, у меня повторных значений нет. Ребята выше правильно сказали, что для моего варианта нужно использовать отдельную корутину на каждый параметр. Согласился с тем, что лучше в один стейт все сделать

Похожие вопросы

Обсуждают сегодня

Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
9
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
🙋 Ребята, всем привет. Поправил задачу: Нужно каждому новому сообщению (1 раз по каждому юзеру) в чате прибавлять снизу кнопку с предложением подписаться на канал. Как добавит...
Alexander
1
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Всем привет. Сейчас я изучаю erlang по книге Erlang and OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил ко...
Freezing Death
12
Карта сайта