首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetpack抱怨“调用@Composable函数的函数必须用@Composable标记”

Jetpack抱怨“调用@Composable函数的函数必须用@Composable标记”
EN

Stack Overflow用户
提问于 2020-01-19 06:15:48
回答 2查看 2.5K关注 0票数 1

我使用了jetpack元素,但是我得到了一个错误:调用@Composable函数的函数在我在onclick lamba上调用一个可组合函数时必须用@ composable标记。

代码语言:javascript
复制
class testActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent { AppBarIcon(Image(10, 10) ) {
                composableFunction()
            }
        }
    }
} 

@Composable()
fun composableFunction() {
}

这是一个真正的问题,因为我在运行时遇到了异常。

你觉得我错过了什么还是真的是个小虫子?

EN

回答 2

Stack Overflow用户

发布于 2020-01-19 08:26:58

首先要注意的是,Composable function must 只有 be called inside another Composable function

现在回到您的问题,接受函数的onClick参数不是一个可组合的函数。因此,在一个@Composable中调用onClick函数不是选项,因此抛出了一个错误Functions which invoke @Composable functions must be marked with the @Composable

解决此问题的代码。

代码语言:javascript
复制
class testActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContent {
        var loadView = +state { false }
        Column {
            AppBarIcon(+imageResource(R.drawable.dashboard)) {
                loadView.value = true
            }
            Text("Hey")
            if (loadView.value)
                composableFunction()
        }
    }
  }
}
@Composable()
fun composableFunction() {
    Text("appbar content")
}

原因是因为onClick是不可组合的:所有可组合函数都同时被调用来组成UI,completely.While onClick稍后在UI已经组成之后调用。因此,在onClick发生后,您需要使用状态来重新组合UI和加载可组合函数。

票数 2
EN

Stack Overflow用户

发布于 2022-10-15 07:46:24

在我的例子中,我添加了一个错误的Composable导入

代码语言:javascript
复制
import androidx.compose.Composable

当我转而导入runtime.Composable之后,这个问题就消失了。

代码语言:javascript
复制
import androidx.compose.runtime.Composable
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59807648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档