[英]Access TextField value from another composable function in Jetpack Compose
[英]Jetpack Compose: Is it possible to call an Composable function on a button click in another Composable function?
当我尝试在 buttonClick 事件上编写文本时,我遇到了问题,我无法在另一个 function 中调用 @Composable function,因为: @Composable invocations can only happen from the context of a @Composable function
发生. 我试图在按钮单击事件中调用 Composable BeCalc function 内的 showResult function。 有任何想法吗? 谢谢
@Composable
fun showResult(result: Int?) {
Text(
buildAnnotatedString {
if(result != null && result != 0){
append("Unnecessary Text")
withStyle(style = SpanStyle(color = MaterialTheme.colors.primaryVariant)) //Einheiten-Anzahl in Farbe
{
append("$result")
}
append("Unnecessary Text")
}
},
modifier = Modifier.padding(top = 48.dp),
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)
}
@Composable
fun BeCalc(openDrawer: () -> Unit) {
var valueCarbohydrate by remember { mutableStateOf(TextFieldValue("")) }
var valueQuantity by remember { mutableStateOf(TextFieldValue("")) }
var result: Int? = 0
Button(
modifier = Modifier.padding(top = 24.dp),
colors = ButtonDefaults.buttonColors(MaterialTheme.colors.primaryVariant),
onClick = {
val intValueQuantity = valueQuantity.text.toInt()
val intValueCarbohydrate = valueCarbohydrate.text.toInt()
if (intValueQuantity != null && intValueCarbohydrate != null) {
result = (intValueCarbohydrate / intValueQuantity)
showResult(result)
} else {
println("No value!")
}
})Button(
modifier = Modifier.padding(top = 24.dp),
colors = ButtonDefaults.buttonColors(MaterialTheme.colors.primaryVariant),
onClick = {
val intValueQuantity = valueQuantity.text.toInt()
val intValueCarbohydrate = valueCarbohydrate.text.toInt()
if (intValueQuantity != null && intValueCarbohydrate != null) {
result = (intValueCarbohydrate / intValueQuantity)
showResult(result)
} else {
println("No value!")
}
}
)
}
Compose 不能以这种方式工作。
您无法在onClick
参数中调用可组合项来显示更新后的值。
相反,您必须使用 state 并在onClick
中更新它。
就像是:
var count by rememberSaveable { mutableStateOf(0) }
var shouldShowResult by remember {
mutableStateOf(false)
}
Button(
//..
onClick = {
val intValueQuantity = valueQuantity.text.toInt()
val intValueCarbohydrate = valueCarbohydrate.text.toInt()
if (intValueQuantity != null && intValueCarbohydrate != null) {
count = (intValueCarbohydrate / intValueQuantity)
shouldShowResult = true
} else {
println("No value!")
}
}
){
Text("Show Result")
}
if (shouldShowResult) {
showResult(count)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.