You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Jetpack Compose中Composable间传递状态变量报错求助

解决Jetpack Compose状态传递的类型不匹配问题

问题原因

你遇到的Type mismatch错误,是因为在SignIn组件的onNameChange回调里,错误地直接给MutableState变量name赋值字符串。name是MutableState<String>类型,它的内部值需要通过value属性来更新,而不是直接替换整个MutableState对象。

修复后的代码

@Composable
fun SignIn(view: View) {
    var name = remember { mutableStateOf("") }

    Column(modifier = Modifier.fillMaxSize()) {
        Spacer(modifier = Modifier.height(250.dp))

        Text(
            text = "My Mental Health",
            fontSize = 36.sp
        )

        Spacer(modifier = Modifier.height(50.dp))

        // 修复:更新MutableState的value属性,而不是直接赋值变量
        TextInputField(label = "Email", value = name.value, onNameChange = { name.value = it })
    }
}

@Composable
fun TextInputField(label: String, value: String, onNameChange: (String) -> Unit) {
    Column(
        modifier = Modifier
            .width(LocalConfiguration.current.screenWidthDp.dp)
            .height(125.dp)
    ) {
        Text(
            text = label,
            modifier = Modifier.height(25.dp)
        )

        Spacer(modifier = Modifier.height(25.dp))

        TextField(value = value, onValueChange = onNameChange)
    }
}

关键说明

  • remember { mutableStateOf("") }创建的是一个MutableState<String>对象,它持有可观察的状态值,必须通过.value来读写内部的字符串值。
  • 你的TextInputField组件定义是正确的:接收字符串类型的value,以及接收字符串参数的回调onNameChange,只需要在父组件里正确传递更新逻辑即可。

内容的提问来源于stack exchange,提问作者mfusco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:59:55