From 57cc2119dd9dbdad2c9e2c5c3108ebc3d60d90e1 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Tue, 11 Oct 2022 21:34:18 +0200 Subject: [PATCH] Scroll to the bottom on sending a message --- .../java/dev/lonami/talaria/ui/ChatScreen.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt b/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt index ff564d3..ea213d2 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt @@ -2,6 +2,8 @@ package dev.lonami.talaria.ui import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.Button @@ -19,6 +21,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import dev.lonami.talaria.R import dev.lonami.talaria.model.Message import dev.lonami.talaria.ui.theme.TalariaTheme +import kotlinx.coroutines.launch @Composable fun MessageCard(message: Message) { @@ -40,8 +43,8 @@ fun MessageCard(message: Message) { } @Composable -fun MessageList(messages: List, modifier: Modifier) { - LazyColumn(modifier) { +fun MessageList(messages: List, modifier: Modifier, listState: LazyListState) { + LazyColumn(modifier, state = listState) { items(messages.size) { MessageCard(messages[it]) } } } @@ -77,14 +80,23 @@ fun MessageInputField( fun ChatScreen(chatViewModel: ChatViewModel = viewModel()) { val chatUiState by chatViewModel.uiState.collectAsState() var messageText by remember { mutableStateOf("") } + val messageListState = rememberLazyListState() + val coroutineScope = rememberCoroutineScope() Column(modifier = Modifier.fillMaxSize()) { - MessageList(chatUiState.messages, modifier = Modifier.weight(1.0f)) + MessageList( + chatUiState.messages, + modifier = Modifier.weight(1.0f), + listState = messageListState + ) MessageInputField(messageText, onMessageChanged = { messageText = it }, onSendMessage = { chatViewModel.sendMessage(messageText) messageText = "" + coroutineScope.launch { + messageListState.animateScrollToItem(chatUiState.messages.size - 1) + } }) } }