【问题标题】:Use of State hosting to change variable in jetpack compose使用 State hosting 更改 jetpack compose 中的变量
【发布时间】:2023-02-01 19:45:21
【问题描述】:
我想更改 jetpack compose 中变量的值。我正在尝试将 Stateful 和 Stateless 与一些代码一起使用,但它在增加值时遇到了一些问题。你们能指导我吗?
ItemColorStateful
@Composable
fun ItemColorStateful() {
var index by remember { mutableStateOf(-1) }
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Different Color")
ButtonScopeStateless(
index = { index },
onIndexChange = {
index = it
}
)
}
}
ButtonScope无状态
@Composable
fun ButtonScopeStateless(
index: () -> Int,
onIndexChange: (Int) -> Unit,
) {
Button(onClick = { onIndexChange(index()++) }) {
Text(text = "Click Me $index")
}
}
我在 index()++ 上收到错误。
【问题讨论】:
标签:
android
kotlin
android-jetpack-compose
【解决方案1】:
您可以使用:
@Composable
fun ItemColorStateful() {
var index by remember { mutableStateOf(-1) }
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Different Color")
ButtonScopeStateless(
index = index ,
onIndexChange = {
index = it
}
)
}
}
@Composable
fun ButtonScopeStateless(
index: Int,
onIndexChange: (Int) -> Unit,
) {
Button(onClick = { onIndexChange(index+1) }) {
Text(text = "Click Me $index")
}
}
【解决方案2】:
ItemColorStateful
@Composable
fun ItemColorStateful() {
var index by remember { mutableStateOf(-1) }
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Different Color")
ButtonScopeStateless(
index = index ,
onIndexChange = {
index++
}
)
}
}
ButtonScope无状态
@Composable
fun ButtonScopeStateless(
index: Int,
onIndexChange: () -> Unit,
) {
Button(onClick = {
onIndexChange()
}) {
Text(text = "Click Me $index")
}
}