原来的代码
@Composable
fun TopBarWithBackKey(onClicked: () -> Unit) {
Row(
Modifier
.background(MaterialTheme.colorScheme.primary)
.fillMaxWidth()
.height(50.dp),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically
) {
Image(
painter = painterResource(id = R.drawable.icon_back_arrow),
contentDescription = null,
modifier = Modifier
.padding(10.dp)
.clickable { onClicked }
)
}
}
问题
在查过gpt之后原来是因为clickable接收函数调用而不是函数类型对象本身
在 Kotlin 中,如果你希望调用一个函数,你需要在函数名后面加上括号 ()
,这样才能执行这个函数。而在函数类型中,你只是声明了一个函数类型的参数,你并没有调用这个函数。
所以,在 clickable
修饰符中,你应该使用 onClicked()
而不是 onClicked
,以便在点击图标时调用这个函数。这样,当用户点击图标时,才会执行你在 onClicked
中定义的操作。
正确的代码
@Composable
fun TopBarWithBackKey(onClicked: () -> Unit) {
Row(
Modifier
.background(MaterialTheme.colorScheme.primary)
.fillMaxWidth()
.height(50.dp),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically
) {
Image(
painter = painterResource(id = R.drawable.icon_back_arrow),
contentDescription = null,
modifier = Modifier
.padding(10.dp)
.clickable { onClicked() }
)
}
}