Почему удаляется последний Composable, а не тот, который находится по определенному индексу?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Почему удаляется последний Composable, а не тот, который находится по определенному индексу?

Сообщение Anonymous »

У меня есть StateFlow объектов в моей ViewModel, в пользовательском интерфейсе я рисую их в цикле forEach, в моем случае мне не нужен LazyColumn, потому что все мои элементы с возможностью масштабирования и рисования. Когда я удаляю определенный элемент из списка по его идентификатору, он удаляется корректно, но в пользовательском интерфейсе кажется, что всегда удаляется последний Composable вместо того, который был привязан к удаленному элементу списка. Как это исправить?
Класс данных объекта состояния имеет аннотацию @Stable.
Box(
modifier = Modifier
.fillMaxSize()
.background(color = Color.Black)
.pointerInput(Unit) {
detectTapGestures(
onTap = {
viewModel.clickEmptySpace()
}
)
}
) {

allObjects.forEachIndexed {i, it->
FrameItem(
it,
it.id() == selectedObj,
click = { id ->
viewModel.objectClick(id)
},
delete = { id ->
viewModel.deleteObject(id)
},
)
}
}

@Composable
fun FrameItem(
obj: CanvasObject,
isSelected: Boolean,
click:(Int)->Unit,
delete:(Int)->Unit,
) {

val frameObj = remember { obj as Frame }

var scale by remember { mutableStateOf(1f) }
var offset by remember { mutableStateOf(Offset.Zero) }
var rotation by remember { mutableStateOf(0f) }

val transformabeState = rememberTransformableState { zoomChange, panChange, rotationChange ->
scale = (scale * zoomChange).coerceIn(0.3f, 5f)
offset += panChange
rotation += rotationChange
}

val frame = painterResource(Res.drawable.iphone_15_frame)

Box(
modifier = Modifier
.fillMaxSize()
.aspectRatio(frame.intrinsicSize.width / frame.intrinsicSize.height)
.graphicsLayer {
scaleX = scale
scaleY = scale
translationX = offset.x
translationY = offset.y
rotationZ = rotation
}
.transformable(transformabeState, enabled = isSelected),
contentAlignment = Alignment.TopEnd
) {

Image(
painter = painterResource(Res.drawable.shot),
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier
.fillMaxSize()
)

}

}

Как удалить объект из переменной состояния, которая работает правильно:
fun deleteObject(id: Int){
val currentList = emptyList().toMutableList()
currentList.addAll(allObjects.value)
currentList.removeAll { it.id()==id }
allObjects.value = currentList
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... ific-index
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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