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
Смысл в том что стейт в репозитории может быть "проапдейчен" тем же значением (т.е. фактически он не меняется) и это означает что рекомпозиция не произойдёт. Так вот мне надо чтобы произошла :) - есть ли какой-то способ это сделать?
а как вы узнаете, что она произошла?
Ну например сообщение в лог пишу
я имею в виду как это повлияет на поведение приложения.
Похоже, что вы пытаетесь рассматривать рекомпозицию как событие - это неправильно по определению. Можно сделать отдельный Flow для этого.
К этому, кстати, подталкивает сама сигнатура компоуза в виде функции, вот в SwiftUI такой идеи в голову не приходит)
Я не пытаюсь "вызвать" рекомпозицию... точнее я понимаю что я не имею прямого влияния на неё и не хочу этого, но я хочу иметь больше контроля относительно того что композ будет считать новым состоянием.
Это функция f(State), которая "эмитит" UI. Рекомпозиция может происходить неконтролируемо в любой момент, любыми кусками и без каких либо гарантий. Там много оптимизаций на эту тему.
Я это понимаю и не вижу никаких противоречий с тем что я хочу :)
Вы хотите, чтобы рекомпозиция сработала если состояние поменялось на тоже самое значение. Композ так не работает.
Я хочу чтобы не композ решал что значит "стейт не изменился" а я
Боюсь, что композ решает здесь
Это я уже догадался :)
Обсуждают сегодня