есть несколько 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
почему в одной корутине запускается сборка?
откровенно говоря, не видел в этом каких-либо проблем. У меня все было на LiveData, увидел статью, где советуют переходить на flow, перевел все так, как было, добавив lifecycleScope.launch { lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {} } Подумал, это же куча boilerplate будет, если на каждый параметр запускать корутину 🤷♂️ т.е. мне на каждый параметр нужно запускать корутину и будет что-то вроде этого
да, на каждую сборку флоу нужно отдельную корутину запускать
спасибо большое
Стейт флоу не эмитит повторно ведь тот же элемент, в отличии от Лайв даты Мб в этом у тебя проблема
я это проверял, у меня повторных значений нет. Ребята выше правильно сказали, что для моего варианта нужно использовать отдельную корутину на каждый параметр. Согласился с тем, что лучше в один стейт все сделать
Обсуждают сегодня