android - @composable 调用只能在 @composable 函数的上下文中发生

标签 android kotlin android-jetpack android-jetpack-compose

单击工具栏操作时,我试图显示 toast 消息,但出现此错误

@composable invocations can only happen from the context of an @composable function


代码:
@Composable
fun Toolbar() {
    TopAppBar(title = { Text(text = "Jetpack Compose") }, navigationIcon = {
        IconButton(onClick = {}) {
            Icon(Icons.Filled.Menu)
        }
    }, actions = {
        IconButton(onClick = {
            showMessage(message = "test")
        }) {
            Icon(vectorResource(id = R.drawable.ic_baseline_save_24))
        }
    })
}

@Preview
@Composable
fun ToolbarPreview(){
    Toolbar()
}

@Composable
fun showMessage(message:String){
    Toast.makeText(ContextAmbient.current, message, Toast.LENGTH_SHORT).show()
}

最佳答案

onClick参数不接受可组合函数。
删除 @Composable showMessage 中的注释.
使用类似的东西:

@Composable
fun Toolbar() {

    val context = LocalContext.current

    TopAppBar(title = {},
            actions = {
        IconButton(onClick = {
            showMessage(context, message = "test")
        }){}
    })
}

fun showMessage(context: Context, message:String){
    Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}

关于android - @composable 调用只能在 @composable 函数的上下文中发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63801346/

相关文章:

android - Kotlin fragment 类型不匹配

android - 原始 kapt 已弃用

field - Kotlin - 如何从接口(interface)覆盖 "lateinit"var?

android - Android Jetpack Compose 是否支持工具栏小部件?

java - 位图图像未锐化

Android打瞌睡报警窗口

Eclipse 中的 Android GUI 布局

android - 如何让toast长时间可见?

android - 无法使用转换 JetifyTransform 解决依赖关系?

android - 使用 AndroidX 导航的 Fragment 中的动态 ActionBar 标题