Почему в Compose сбрасывается статус?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему в Compose сбрасывается статус?

Сообщение Anonymous »

У меня возникла очень странная проблема. Я создаю метод для обработки событий щелчка на экране, так как я хочу сохранить все указатели на карте с их идентификатором и положением. У меня есть класс состояния, в котором у меня есть эта карта, и я обновляю ее с помощью метод в ViewModel

Код: Выделить всё

data class RandomState(
val touchedPositions: Map = emptyMap(),
)

Код: Выделить всё

fun updateTouchedPositions(
touchedPositions: Map < Long, Pair < Float, Float >>
) {
println("Function from viewModel: $touchedPositions")
state = state.copy(
touchedPositions = touchedPositions)
}

Код: Выделить всё

.pointerInput(Unit) {
awaitEachGesture {
val positions = mutableMapOf < Long, Pair < Float, Float >> ()

do {
val event = awaitPointerEvent()
val canceled = event.changes.fastAny {
it.isConsumed
}

if (event.type == PointerEventType.Press) {
event.changes.forEach { pointer - >
val id = pointer.id.value
val x = pointer.position.x
val y = pointer.position.y
positions[id] = Pair(x, y)
}
println("Se van a guardar las posiciones: $positions")
viewModel.updateTouchedPositions(positions)
println("Posiciones de dedos en onPress: ${state.touchedPositions}")
}

if (event.type == PointerEventType.Release) {
println("Posiciones de dedos en onRelease: ${state.touchedPositions}")
}

} while (!canceled)
}
}
Поэтому я объявляю в своей viewModel свой класс состояния, к которому я обращаюсь в Composable с помощью viewModel.state.

Код: Выделить всё

// ViewModel class

var state by mutableStateOf(RandomState())
private set
Проблема в том, что, хотя с отладкой все вроде бы в порядке, когда я нахожусь во второй печати внутри if блока do, state.touchedPositions пуст. Как будто класс состояния каким-то образом сбрасывается в состояние по умолчанию, но я не могу понять, почему.


Подробнее здесь: https://stackoverflow.com/questions/783 ... in-compose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»