Composables
Docs Login
Pairel

Conversations List

Jetpack Compose Component

Download
package com.composables.pairel.components

import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.style.TextOverflow
import com.composables.pairel.Person
import com.composables.uripainter.rememberUriPainter
import kotlin.time.Duration.Companion.milliseconds

data class Conversation(
    val person: Person,
    val message: String,
    val time: String,
    val unread: Boolean = false,
)

@Composable
fun ConversationsList(
    conversations: List<Conversation>,
    onConversationClick: (Person) -> Unit,
    modifier: Modifier = Modifier,
    contentPadding: PaddingValues = PaddingValues(),
    header: @Composable () -> Unit = {},
) {
    LazyColumn(modifier = modifier, contentPadding = contentPadding) {
        item(key = "header") { header() }
        items(conversations, key = { it.person.name }) { conversation ->
            val person = conversation.person
            ConversationListItem(
                onClick = { onConversationClick(person) },
                onClickLabel = "Open conversation with ${person.name}",
                unread = conversation.unread,
                avatar = {
                    Avatar(
                        initials = person.name.take(1),
                        contentDescription = "${person.name}'s photo",
                        painter =
                            rememberUriPainter(
                                person.photoUrl,
                                crossfade = 300.milliseconds,
                                contentScale = ContentScale.Crop,
                            ),
                    )
                },
                name = { Text(person.name) },
                message = {
                    Text(conversation.message, maxLines = 1, overflow = TextOverflow.Ellipsis)
                },
                time = { Text(conversation.time) },
            )
        }
    }
}

More components from Pairel

by Alex Styl

Search screens and components

Screen flows

Screens

UI Elements