我正在尝试将 MutableState 变量传递给另一个函数。下面这一切都很好。但我不喜欢
myMutableState.value
@Composable
fun Func() {
val myMutableState = remember { mutableStateOf(true) }
Column {
AnotherFunc(mutableValue = myMutableState)
Text(if (myMutableState.value) "Stop" else "Start")
}
}
@Composable
fun AnotherFunc(mutableValue: MutableState<Boolean>) {
}
所以我决定使用
val myMutableState by remember { mutableStateOf(true) }
,如下图。我不再需要使用myMutableState.value
,如下所示。
不幸的是,下面的代码无法编译。这是因为我无法将它传递给函数
AnotherFunc(mutableValue = myMutableState)
@Composable
fun Func() {
val myMutableState by remember { mutableStateOf(true) }
Column {
AnotherFunc(mutableValue = myMutableState) // Error here
Text(if (myMutableState) "Stop" else "Start")
}
}
@Composable
fun AnotherFunc(mutableValue: MutableState<Boolean>) {
}
我怎样才能仍然使用
by
并且仍然能够通过函数传递 MutableState ?
=-0987我们的可组合函数应该只接受布尔值:
@Composable
fun AnotherFunc(mutableValue: Boolean) {
}
不确定为什么您的可组合函数(AnotherFun)需要具有可变状态。调用函数(Fun)会在值改变时自动重构,触发AnotherFun的重构。
虽然 Johann 的解决方案适用于 OP 的特定场景,但为了能够为传递的参数分配另一个值,每次更改都需要一个 Lambda 函数,如下所示:
@Composable
fun AnotherFunc(mutableValue: Boolean, onMutableValueChange: (Boolean) -> Unit){
onMutableValueChange(false) // myMutableState would now also be false
}
@Composable
fun Func() {
val myMutableState by remember { mutableStateOf(true) }
Column {
AnotherFunc(mutableValue = myMutableState, onMutableValueChange = {myMutableState = it})
}
}
(Boolean) -> Unit
表示接受布尔值作为参数且没有返回值的函数。只需传递一个 lambda 函数来更改 mutableValue
,如上例所示,并在需要更改 AnotherFunc
时在 mutableValue
中调用它。