例如,它在可组合函数中与state {}一起使用。
@Composable
fun CounterButton(text: String) {
val count = state { 0 }
Button(
modifier = Modifier.padding(8.dp),
onClick = { count.value++ }) {
Text(text = "$text ${count.value}")
}
}
但是如何在可组合函数之外更新值? 我发现了一个mutableStateOf()函数和MutableState接口,它们可以在可组合函数之外创建,但在值更新后无效。
我的尝试不起作用的示例:
private val timerState = mutableStateOf("no value", StructurallyEqual)
@Composable
private fun TimerUi() {
Button(onClick = presenter::onTimerButtonClick) {
Text(text = "Timer Button")
}
Text(text = timerState.value)
}
override fun updateTime(time: String) {
timerState.value = time
}
撰写版本为0.1.0-dev14
答案 0 :(得分:0)
您可以通过以下方式来实现此目的:通过可控制的可组合函数的参数公开状态,并在可控制的可组合函数的外部实例化该状态。
代替:
@Composable
fun CounterButton(text: String) {
val count = remember { mutableStateOf(0) }
//....
}
您可以执行以下操作:
@Composable
fun screen() {
val counter = remember { mutableStateOf(0) }
Column {
CounterButton(
text = "Click count:",
count = counter.value,
updateCount = { newCount ->
counter.value = newCount
}
)
}
}
@Composable
fun CounterButton(text: String, count: Int, updateCount: (Int) -> Unit) {
Button(onClick = { updateCount(count+1) }) {
Text(text = "$text ${count}")
}
}
通过这种方式,您可以通过调用它的函数来控制内部状态。
这称为状态提升。