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

问题描述

当我单击工具栏上的操作时,我试图显示一条吐司消息,但出现此错误

@composable调用只能在以下情况下发生: @composable函数

代码:

@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 = ContextAmbient.current

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...