Я знаю, что значение состояния меняется, потому что когда я поворачиваю экран и там полная перекомпозиция, показывает то, что должно показывать с измененным значением, но только после поворота экрана. Я хочу, чтобы изменения на экране происходили без его поворота.
Это моя модель представления:
Код: Выделить всё
@HiltViewModel
class CragToposViewModel @Inject constructor() : ViewModel() {
private var _state = MutableStateFlow(CragToposState(true))
val state = _state.asStateFlow()
}
Код: Выделить всё
data class CragToposState(
var zoomedOutImage: Boolean,
)
Код: Выделить всё
@Composable
fun CragToposScreen(
navController: NavController,
cragToposViewModel: CragToposViewModel = hiltViewModel(),
) {
val state = cragToposViewModel.state.collectAsState()
CragToposContent(
navController = navController,
state = state,
)
}
@Composable
fun CragToposContent(
navController: NavController,
state: State,
) {
val context = LocalContext.current
val scrollState = rememberScrollState()
if (state.value.zoomedOutImage) {
// SOME OTHER STUFF HERE
ZoomButton(state)
} else {
// SOME OTHER STUFF HERE
ZoomButton(state)
}
}
@Composable
fun ZoomButton(state: State) {
Box(
modifier = Modifier
.clickable { state.value.zoomedOutImage = !state.value.zoomedOutImage },
) {
Icon(
painter = if (state.value.zoomedOutImage)
painterResource(R.drawable.icon_zoom_in)
else painterResource(R.drawable.icon_zoom_out),
contentDescription = "",
)
}
}
Нужен ли мне StateFlow здесь ? Я просто хочу, чтобы состояние менялось после нажатия кнопки
Почему я должен использовать State и не могу просто использовать CragToposState для развлечения CragToposContent ?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ate-change