我有下面的代码.
@Composable
fun MainCompose(trigger: Int) {
var trigger by remember { mutableStateOf(0) }
val onDrag = { trigger += 1 }
MyPointInput(trigger = trigger, onDrag)
}
@Composable
fun MyPointInput(trigger: Int, onDrag: () -> Unit) {
Box(modifier = Modifier
.background(Color.Green)
.size(300.dp)
.pointerInput(trigger) {
var a = 0
detectTransformGestures { centroid, pan, zoom, rotation ->
println("trigger: $trigger with $a")
a += 1
onDrag()
}
})
}
当我开始拖动时,我可以看到控制台中的数字1,2,3 ...。
但是如果触发数改变,则打印停止并且不再开始。
文件上说
将捕获的值指定为关键参数将导致块在值更改时取消并从头重新启动:
为什么我的代码没有重新启动
1条答案
按热度按时间wqnecbli1#
如果使用情况有问题,您正在隐藏
MainCompose(trigger: Int)
的参数,则仅使用var trigger by remember { mutableStateOf(0) }
。如果您希望将触发值重置为参数值,则可以将其更新为通过更改此值,您将在每次onDrag调用时更新触发器,并重置为从使用
initialValue
参数调用MainCompose
的函数发送的值。您可能还希望在每次initialValue更改时重置Modifer.pointerInput(),而不是将其本身触发为
只有当新值通过MainCompose发送时才会重置。2使用触发器作为参数更改触发器更新的时刻,并导致前一个立即丢弃,当然假设这不是预期行为。
输出将为
实施情况如下
其中一些日志