Estoy tratando de mostrar un mensaje de brindis cuando hago clic en una acción de la barra de herramientas, pero recibo este error
Las invocaciones @composable solo pueden ocurrir desde el contexto de una función @composable
Código:
@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() }El parámetro onClick no acepta una función componible. Elimina la anotación @Composable en showMessage .
Usa algo como:
@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() }¿Quieres decir algo como esto?
@Composable fun MyTopAppBar( title: String, actionItem: TopBarActionItem, navigationClick: (@Composable () -> Unit)? = null) {} ¿Y cómo invocas a navigationClick? El método de invoke() en sí mismo no se puede componer y obtuvo el error nuevamente.
¿No puedes usar navigationClick?.invoke()
Obtuve el mismo error y mi solución fue agregar una anotación @Composable al parámetro en mi método donde paso otra función componible.
Ejemplo:
navigationIcon: @Composable () -> Unit