Android Compose中pointerInput的key参数为何未重启手势检测?
问题原因分析
你的代码存在两个关键问题导致该现象出现:
1. 参数被内部状态遮蔽(无效参数)
在MainCompose中,你定义了同名的参数trigger和内部可变状态trigger:
@Composable fun MainCompose(trigger: Int) { var trigger by remember { mutableStateOf(0) } // 这个变量完全遮蔽了外部传入的参数 // ... }
内部的trigger覆盖了外部参数,导致外部传入的参数根本不会被使用,属于无效定义。
2. pointerInput重启后需重新触发手势
根据官方文档描述,pointerInput(key)的代码块会在key变化时取消并重启:
将捕获的值指定为key参数,当值变化时会使代码块取消并从头重启
当你拖动时调用onDrag()修改trigger,MyPointInput的trigger参数变化,pointerInput协程被取消,原有detectTransformGestures的监听立即停止,打印也就中断了。
新的pointerInput协程启动后,detectTransformGestures会重新开始监听,但它只会响应新的手势操作——也就是说你需要松开手指,再次执行拖动动作,才会触发新的回调打印。如果在trigger变化时你没有松开手指,当前正在进行的拖动手势不会被新的协程捕获,自然无法再次启动打印。
内容的提问来源于stack exchange,提问作者evergreen
相关产品推荐
相关产品推荐

