How to replace multiple lambda () -> Unit in a composable in Jetpack compose android
@Composable fun ChatMessageDisplay (
authorName: String,
author ImageUrl: String,
dateSent: String,
messages: List<Content>,
likeCounts: List<Int>,
onLikeClick: (Int) -> Unit,
onMessageClick: (Int) -> Unit,
onMessageLongClick: (Int) -> Unit,
onUserPhotoClick: () -> Unit,
onVisibleOnScreen: (Int) -> Unit,
onShareClick: (Int) -> Unit,
onEditClick: (Int) -> Unit,
)
I have above composable Which requires multiple lambda () -> Unit
how can we replace them with a single lambda () -> Unit or any simple method to reduce multiple lambda () -> Units
You can use a single lambda that takes a sealed class or an enum as its parameter
Here
sealed class ChatMessageEvent {
data class LikeClick(val messageId: Int) : ChatMessageEvent()
data class MessageClick(val messageId: Int) : ChatMessageEvent()
data class MessageLongClick(val messageId: Int) : ChatMessageEvent()
data object UserPhotoClick : ChatMessageEvent()
data class VisibleOnScreen(val messageId: Int) : ChatMessageEvent()
data class ShareClick(val messageId: Int) : ChatMessageEvent()
data class EditClick(val messageId: Int) : ChatMessageEvent()
}
Then modify ChatMessageDisplay composable to take a single lambda parameter that accepts a ChatMessageEvent
@Composable
fun ChatMessageDisplay(
authorName: String,
authorImageUrl: String,
dateSent: String,
messages: List<Content>,
likeCounts: List<Int>,
onEvent: (ChatMessageEvent) -> Unit
) {
// Implementation where you call onEvent with the appropriate event
// For example, for a like click:
// IconButton(onClick = { onEvent(ChatMessageEvent.LikeClick(messageId)) })
}
Then you can handle the event in the caller
ChatMessageDisplay(
authorName = "ME",
authorImageUrl = "url_to_image",
dateSent = "2024-02-26",
messages = emptyList(),
likeCounts = emptyList(),
onEvent = { event ->
when (event) {
is ChatMessageEvent.LikeClick -> {
// Handle like click
}
is ChatMessageEvent.MessageClick -> {
// Handle message click
}
is ChatMessageEvent.MessageLongClick -> {
// Handle message long click
}
is ChatMessageEvent.UserPhotoClick -> {
// Handle user photo click
}
is ChatMessageEvent.VisibleOnScreen -> {
// Handle visible on screen
}
is ChatMessageEvent.ShareClick -> {
// Handle share click
}
is ChatMessageEvent.EditClick -> {
// Handle edit click
}
}
}
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With