我知道在 onClick 中调用可组合函数是不可能的。 @Composable 调用只能在@Composable 函数的上下文中发生
撰写版本 - alpha06
但我坚持以下要求。 要求是, 在 onClick 中调用服务器 api 调用。
LazyColumnFor(items = list) { reports ->
Box(Modifier.clickable(
onClick = {
//API call
val liveDataReportsDetails =
viewModel.getReportDetails("xxxx")
LiveDataComponentForReportsDetails(liveDataReportsDetails)
}
)) {
ReportListItem(
item = reports
)
}
}
答案 0 :(得分:5)
所以你是对的,不能从按钮或修饰符的 onClicks 中调用可组合函数。所以你需要创建一个像这样的值:
private val showDialog = mutableStateOf(false)
当设置为 true 时,您要调用可组合代码,例如:
if(showDialog.value) {
alert()
}
警报类似于:
@Composable
fun alert() {
AlertDialog(
title = {
Text(text = "Test")
},
text = {
Text("Test")
},
onDismissRequest = {
},
buttons = {
Button(onClick = { showDialog.value = false }) {
Text("test")
}
}
)
}
现在完成更改预期的布尔值,例如:
Box(Modifier.clickable(
onClick = {
showDialog.value = true
}
))
我希望这个解释有帮助,当然值不一定是布尔值,但你明白了这个概念:)