Quando TooltipBox
aberto, clicar em qualquer elemento que pode ser composto na tela não tem outro efeito além de descartar o pop-up. Como isso acontece e qual é a maneira eficaz de implementá-lo, não importa onde o Composable atual esteja na árvore de composição quando a Popup
estiver aberto, para que nenhum outro Composable Popup
receba quaisquer gestos.
@Preview
@Composable
fun TooltipBoxSample() {
Column(
modifier = Modifier.fillMaxSize().border(2.dp, Color.Blue)
) {
Button(
onClick = {}
){
Text("Some button")
}
val state = rememberTooltipState(
isPersistent = true
)
val coroutineScope = rememberCoroutineScope()
Spacer(modifier = Modifier.height(120.dp))
Row(
modifier = Modifier.weight(1f)
) {
Spacer(modifier = Modifier.width(100.dp))
TooltipBox(
positionProvider = rememberPlainTooltipPositionProvider(
spacingBetweenTooltipAndAnchor = 16.dp
),
state = state,
tooltip = {
PlainTooltip(
caretProperties = CaretProperties(
caretWidth = 16.dp,
caretHeight = 16.dp
),
shape = RoundedCornerShape(16.dp),
containerColor = Color.Red
) {
Text(
text = "Tooltip Content for testing...",
modifier = Modifier.padding(16.dp)
)
}
},
content = {
Icon(
modifier = Modifier
.size(60.dp)
.clickable {
coroutineScope.launch {
state.show()
}
},
imageVector = Icons.Default.Info,
contentDescription = null
)
}
)
}
}
}
Se você tocar em qualquer lugar da tela com Popup
elementos que podem ser compostos, receberá eventos de clique
@Preview
@Composable
fun PopupOpenCloseTest() {
var showPopup by remember {
mutableStateOf(false)
}
Column(
modifier = Modifier.fillMaxSize()
) {
Button(
onClick = {}
) {
Text("Some button")
}
Box {
Icon(
modifier = Modifier
.border(2.dp, Color.Blue)
.size(60.dp)
.clickable {
if (showPopup.not()) {
showPopup = true
}
println("CLICKED showPopup: $showPopup")
},
imageVector = Icons.Default.Info,
contentDescription = null
)
if (showPopup) {
Popup(
offset = IntOffset(300, 300),
onDismissRequest = {
if (showPopup) {
showPopup = false
}
}
) {
Box(
modifier = Modifier.background(Color.White).padding(16.dp)
) {
Text("Popup Content")
}
}
}
}
}
}
Inspecionei o código-fonte do Tooltip e do BasicTooltip , mas não há nenhum lugar onde ele crie uma janela ou visualização que cancele o gesto ou consuma algum.
Tornar o Popup focalizável resolverá o problema: