Estou tentando interceptar e consumir todos os eventos de clique no nível pai no Jetpack Compose para que os composables filhos (como um Button) não recebam cliques. No entanto, mesmo depois de chamar consuma() em awaitPointerEventScope, o filho ainda recebe o evento de clique.
Aqui está meu código:
@Composable
fun ParentConsumesClick() {
Box(
modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
awaitPointerEventScope {
while (true) {
val event = awaitPointerEvent()
Log.d("Click", "Consumed in Parent")
event.changes.forEach { it.consume() } // Consume touch event
}
}
}
.background(Color.Gray),
contentAlignment = Alignment.Center
) {
Button(onClick = { Log.d("Click", "Child clicked") }) {
Text("Click Me")
}
}
}
Comportamento esperado:
- Clicar em qualquer lugar dentro da caixa deve registrar
"Consumed in Parent"
. - O botão interno não deve receber nenhum clique (ou seja,
"Child clicked"
não deve ser registrado).
Comportamento real:
"Consumed in Parent"
é registrado (mostrando que o pai recebe o evento).- Mas o Botão ainda recebe o evento de clique e registra
"Child clicked"
.