У меня есть 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
Почему удаляется последний Composable, а не тот, который находится по определенному индексу? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как передать параметр в параметр @Composable из @Composable, где первый из них вложен?
Anonymous » » в форуме Android - 0 Ответы
- 83 Просмотры
-
Последнее сообщение Anonymous
-