如何将委托的 mutableVariable 传递给 Compose 函数?

问题描述 投票:0回答:2

我正在尝试将 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 ?

android kotlin android-jetpack-compose
2个回答
4
投票

=-0987我们的可组合函数应该只接受布尔值:

@Composable
fun AnotherFunc(mutableValue: Boolean) {
}

不确定为什么您的可组合函数(AnotherFun)需要具有可变状态。调用函数(Fun)会在值改变时自动重构,触发AnotherFun的重构。


0
投票

虽然 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
中调用它。

© www.soinside.com 2019 - 2024. All rights reserved.