我想传递状态,但它抛出错误"val不可重新分配".

@Composable
fun MyUi() {
    var showContent by remember { mutableStateOf(false) }
    if (showContent) {
        MyButton(showContent)  
    }
}

@Composable
fun MyButton(showContent: Boolean) {
    // very long content
    Button(onClick = {
        showContent = true
    }) {
        Text(text = "Very long content")
    }
}

推荐答案

您应该使您的Composable无状态并向上传递事件,像这样更改它,其中顶部的Composable负责更改标志

@Composable
fun MyUi() {
    var showContent by remember { mutableStateOf(false) }
    if (showContent) {
        MyButton(
            onClick = {
                showContent = true
            }
        )
    }
}

@Composable
fun MyButton(onClick: () -> Unit) {
    // very long content
    Button(onClick = onClick) {
        Text(text = "Very long content")
    }
}

Android相关问答推荐

更新画布上的绘图以具有水平填充

滑动以更改合成中的活动

无法安装后重新编译android代码'

Android Kotlin ImageView内置于Kotlin ImageView中.适配器未按预期更新

为什么我有多个Player实例?

Android Kotlin - 计费 - 从应用内购买获取productId

任务:app:kaptGenerateStubsDebugKotlin执行失败. > 'compileDebugJavaWithJavac' 任务(当前目标是 1.8)

请求访问小部件中的位置权限

如何在ExecutorService中设置progressBar的进度?不想使用 AsyncTask,因为它已被弃用

是否可以按照干净的体系 struct 将活动实例传递给视图模型

如何知道我的应用程序的新版本是否显示广告?

在 theme.xml 中使用 android:autoCompleteTextViewStyle

在 Jetpack Compose 中包装内容

在 Jetpack Compose 中单击时更改表面项目的背景 colored颜色

Jetpack compose 为网络检索视频帧导致延迟

Jetpack Compose TextField 在输入新字符时不更新

如何在 Dolphin 中启用 android studio new logcat | 2021.3.1 金丝雀 6?

TextField 溢出和软包装不适用于 Compose 约束布局

如何使用 Kotlin Coroutines 正确地拥有待处理的操作队列?

Android YouTube SDK - 视频无法在某些 Android 设备中播放