Передать метод в Composable как параметр внутри кликабельной лямбды. Выражение не используется

У меня есть следующий Composable

@Composable
fun ClickableBar(text: String, action: () -> Unit) {
    Row(
        modifier = Modifier
            .height(40.dp)
            .background(color = AppPrimaryGreen)
            .fillMaxWidth()
            .clickable { action },
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = text)

        Icon(
            painter = painterResource(R.drawable.icon_arrow_right),
            contentDescription = "",
        )
    }
}

Я хочу выполнить метод action, когда этот Row нажат, но action выделяется и написано The expression is unused.

Что я делаю не так??

3
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно вызвать его так:

action()

Поскольку action — это лямбда-функция, передаваемая в функцию ClickableBar, при ее вызове необходимо включать круглые скобки, как и при вызове любой другой функции.

Это было вот что! Потрясающий. Большое спасибо

juske 25.08.2024 09:22

На самом деле есть два способа сделать это.

dev.tejasb предложил следующее для вызова функции action путем добавления круглых скобок:

.clickable { action() }

Но вы также можете сделать это:

.clickable(onClick = action)

Оба варианта предоставляют значение параметра onClick. В то время как первый вариант создает новую лямбду и вызывает в ней action, второй вариант напрямую передает action в качестве параметра. Обратите внимание, что onClick имеет тип () -> Unit, тот же тип, что и action, поэтому вы можете просто назначить параметр, как показано в варианте 2.

Другие вопросы по теме