Помогите! Как лучше всего вызывать DataStore в Composable функции? Нужно сделать

так, чтобы загрузка значения была синхронной с отрисовкой экрана.

Сейчас делаю вот так, но это совсем не катит....
val context = LocalContext.current
val datastore = SubscriptionRepository(context)
val isUserHasSub = runBlocking { datastore.isUserHaveSubscription.first() }

22 ответов

31 просмотр

Смотреть доку композа по SideEffects

А почему не катит?

Михаил- Автор вопроса
Denis
Смотреть доку композа по SideEffects

Подскажи более конкретнее, пожалуйста. Какая штука мне может помочь, потому что тема-то довольно обширная, а мне бы сегодня завершить

Михаил
Подскажи более конкретнее, пожалуйста. Какая штука...

За Вас я код писать не буду, задача типовая и есть примеры подобного в офф доках.

runblocking засунуть в remember можно

Михаил- Автор вопроса
Denis
За Вас я код писать не буду, задача типовая и есть...

Секция по Side Effects вполне нормально описывает то, что Вам нужно

Михаил- Автор вопроса
Vitaly Demidenko
runblocking засунуть в remember можно

Блокирует поток, ну и получает только первое значение из дата стор, получается некорректно. А если указываю last(), то приложение зависает на запуске сплэш скрина

А зачем "чтобы загрузка значения была синхронной с отрисовкой экрана" ?

Михаил
Блокирует поток, ну и получает только первое значе...

По своему опыту оно блокирует на не более чем 1мс Можно ещё flow.collectAsState(init = null)

Михаил- Автор вопроса
Alexey Illarionov
А зачем "чтобы загрузка значения была синхронной с...

У меня в isUserHaveSubscription хранится логическое значение есть ли у пользователя подписка. Если выпадает false, то отображается оформите подписку, реклама откручивается. Это очень критично, вообщем)

Михаил- Автор вопроса
Михаил
У меня в isUserHaveSubscription хранится логическо...

звучит так, будтно здесь нужно вводить третье состояние "данные ещё не загружены"

Это технически невозможно. Нужно состояние загрузки, и потом состояние с данными.

Alexey Illarionov
звучит так, будтно здесь нужно вводить третье сост...

Сейчас и до sealed дойдем, чутка подождать надо

Михаил- Автор вопроса
Arkadii Ivanov
Это технически невозможно. Нужно состояние загрузк...

Окей, спасибо. Так и сделаю значит через состояния.

Denis
Сейчас и до sealed дойдем, чутка подождать надо

Советы в таком тоне всем только мешают. Вы можете вообще не отвечать сюда, если вам не нравится тема обсуждения, кажется слишком простой или обсуждавшейся сто раз. Кто-нибудь другой обязательно объяснит нормально

Arkadii Ivanov
Это технически невозможно. Нужно состояние загрузк...

А runBlocking на главном потоке может приводить к deadlock.

Alexey Illarionov
Советы в таком тоне всем только мешают. Вы можете ...

Советы прочитать поподробнее доку композа и его стиль работы - всем мешают? Ок, если хочется превратить чат в аналог android_ru где мусолят "а как мне строку в бандл передать" - ваше право

Denis
Советы прочитать поподробнее доку композа и его ст...

Так его коммент был не к совету, а к тону)

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

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

Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
В чем может быть причина такого поведения? Библиотека есть, версия совпадает, но не собирается. Скармливаешь в rebar.lock - работает (потом отваливается другая, и так, пока не...
Δημήτηρ
2
Было открыто два проекта в Xcode. В одном делал билд, а в другом просто ковырялся. Проц разогрелся до 99 градусов, изображение на дисплее посыпалось и через 5 секунд комп выру...
Alexander Sherbakov
10
Привет! Подскажите может кто сталкивался, при создании купона выходит вот в таком виде окно. Как поправить это?
Ruslan
4
Всем привет. Понимаю, что вопрос, вероятно, будет крайне абстрактным, но все же. Что можно сделать с "Failed to fetch and copy dep", если это сторонняя зависимость сторонней б...
Δημήτηρ
3
Не читал, но осуждаю. Какая версия вапора? У нас при двойном запросе тоже падал, пока не обновили с патчем
Sergey
6
Карта сайта