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

Jetpack Compose中@Composable函数间传参及调用报错解决咨询

解决Jetpack Compose中“@Composable invocations can only happen from the context of a @Composable function”报错

这个报错的核心原因是违反了Jetpack Compose的Composable函数调用规则:只有在标记了@Composable的函数内部,或者Composable类型的lambda(如LaunchedEffect、remember的参数)中,才能调用其他@Composable函数。根据你的需求,分两种场景处理:

场景1:不需要Composable能力(纯逻辑函数)

如果A和B只是普通的逻辑函数,不需要参与UI渲染,直接去掉@Composable注解即可,像你最初的代码那样正常传参:

fun A(str: String) {
    print(str)
}

fun B() {
    A("Hi")
}

这种普通函数的调用不受Composable上下文限制,完全可以正常运行。

场景2:需要Composable能力(涉及UI渲染)

如果其中某个函数是用来构建UI的Composable(比如A是用来显示文本的UI组件),那么调用它的上层函数必须也标记为@Composable,保证调用上下文合规:

@Composable
fun A(str: String) {
    Text(text = str) // 示例:用Composable组件展示文本
}

@Composable
fun B() {
    A("Hi") // B是Composable函数,可合法调用A
}

关键规则总结

  • 普通函数(无@Composable注解):可以在任何上下文自由调用,传参逻辑和常规Kotlin函数一致。
  • Composable函数(带@Composable注解):只能在Composable上下文中调用,即上层调用者必须也是Composable函数/Composable lambda。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:33:10