так, чтобы загрузка значения была синхронной с отрисовкой экрана.
Сейчас делаю вот так, но это совсем не катит....
val context = LocalContext.current
val datastore = SubscriptionRepository(context)
val isUserHasSub = runBlocking { datastore.isUserHaveSubscription.first() }
Смотреть доку композа по SideEffects
А почему не катит?
Подскажи более конкретнее, пожалуйста. Какая штука мне может помочь, потому что тема-то довольно обширная, а мне бы сегодня завершить
За Вас я код писать не буду, задача типовая и есть примеры подобного в офф доках.
runblocking засунуть в remember можно
Спасибо, дай бог тебе здоровья!👍
Секция по Side Effects вполне нормально описывает то, что Вам нужно
Блокирует поток, ну и получает только первое значение из дата стор, получается некорректно. А если указываю last(), то приложение зависает на запуске сплэш скрина
А зачем "чтобы загрузка значения была синхронной с отрисовкой экрана" ?
По своему опыту оно блокирует на не более чем 1мс Можно ещё flow.collectAsState(init = null)
У меня в isUserHaveSubscription хранится логическое значение есть ли у пользователя подписка. Если выпадает false, то отображается оформите подписку, реклама откручивается. Это очень критично, вообщем)
Это тоже в runblocking?
collect as state? Нет
звучит так, будтно здесь нужно вводить третье состояние "данные ещё не загружены"
Это технически невозможно. Нужно состояние загрузки, и потом состояние с данными.
Сейчас и до sealed дойдем, чутка подождать надо
Окей, спасибо. Так и сделаю значит через состояния.
Советы в таком тоне всем только мешают. Вы можете вообще не отвечать сюда, если вам не нравится тема обсуждения, кажется слишком простой или обсуждавшейся сто раз. Кто-нибудь другой обязательно объяснит нормально
А runBlocking на главном потоке может приводить к deadlock.
Советы прочитать поподробнее доку композа и его стиль работы - всем мешают? Ок, если хочется превратить чат в аналог android_ru где мусолят "а как мне строку в бандл передать" - ваше право
Так его коммент был не к совету, а к тону)
Обсуждают сегодня