首页 > 解决方案 > @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()
}

标签: androidkotlinandroid-jetpackandroid-jetpack-compose

解决方案


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()
}

推荐阅读