Добрый день. Вопрос про стейт... Есть примерно вот такой код: class

MyRepository... {
val _myState = MutableStateFlow(0)
val myState = _myState.asStateFlow()
...
fun updateState(ii:Int) {
_myState.value = ii
}
}
...
@Composable
fun MyUI() {
...
val subs = viewModel.myRepository.myState.collectAsState()
Box {
Text(text = subs.toString())
}
}
...
// somewhere
myRepository.updateState(0) // same value
Смысл в том что стейт в репозитории может быть "проапдейчен" тем же значением (т.е. фактически он не меняется) и это означает что рекомпозиция не произойдёт. Так вот мне надо чтобы произошла :) - есть ли какой-то способ это сделать?

14 ответов

2 просмотра

а как вы узнаете, что она произошла?

Agry-Gami Автор вопроса
Agry Gami
Ну например сообщение в лог пишу

я имею в виду как это повлияет на поведение приложения.

Похоже, что вы пытаетесь рассматривать рекомпозицию как событие - это неправильно по определению. Можно сделать отдельный Flow для этого.

Arkadii Ivanov
Похоже, что вы пытаетесь рассматривать рекомпозици...

К этому, кстати, подталкивает сама сигнатура компоуза в виде функции, вот в SwiftUI такой идеи в голову не приходит)

Agry-Gami Автор вопроса
Arkadii Ivanov
Похоже, что вы пытаетесь рассматривать рекомпозици...

Я не пытаюсь "вызвать" рекомпозицию... точнее я понимаю что я не имею прямого влияния на неё и не хочу этого, но я хочу иметь больше контроля относительно того что композ будет считать новым состоянием.

Agry Gami
А что это?

Это функция f(State), которая "эмитит" UI. Рекомпозиция может происходить неконтролируемо в любой момент, любыми кусками и без каких либо гарантий. Там много оптимизаций на эту тему.

Agry-Gami Автор вопроса
Arkadii Ivanov
Это функция f(State), которая "эмитит" UI. Рекомпо...

Я это понимаю и не вижу никаких противоречий с тем что я хочу :)

Agry Gami
Я это понимаю и не вижу никаких противоречий с тем...

Вы хотите, чтобы рекомпозиция сработала если состояние поменялось на тоже самое значение. Композ так не работает.

Agry-Gami Автор вопроса
Arkadii Ivanov
Вы хотите, чтобы рекомпозиция сработала если состо...

Я хочу чтобы не композ решал что значит "стейт не изменился" а я

Agry-Gami Автор вопроса

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

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

Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Чет мне ссыкотно опять Rainlab.User в проект ставить. Кто знает, опять наотъебись все сделали или после обнов пользоваться можно?
Black Cat
10
Загрузил на свой сервер, теперь обычные прямые ссылки без query параметров и возможных ограничений, всё равно та же ошибка. Неужели скачивать из VK и перезаливать в TG кажд...
Alexey S
2
это группа токсиков или тех кто помогает?
Ибрагим
9
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Можете помочь с этим, я тут использую Джанго как ОРМ для бота, но бот запускать не хочет, уже всезде перерыл не могу решить, может кто то сталкивался?
Ибрагим
4
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
Карта сайта