У меня есть следующий 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.
Что я делаю не так??
Вам нужно вызвать его так:
action()
Поскольку action — это лямбда-функция, передаваемая в функцию ClickableBar, при ее вызове необходимо включать круглые скобки, как и при вызове любой другой функции.
На самом деле есть два способа сделать это.
dev.tejasb предложил следующее для вызова функции action путем добавления круглых скобок:
.clickable { action() }
Но вы также можете сделать это:
.clickable(onClick = action)
Оба варианта предоставляют значение параметра onClick. В то время как первый вариант создает новую лямбду и вызывает в ней action, второй вариант напрямую передает action в качестве параметра. Обратите внимание, что onClick имеет тип () -> Unit, тот же тип, что и action, поэтому вы можете просто назначить параметр, как показано в варианте 2.
Это было вот что! Потрясающий. Большое спасибо