chatgui-android: автоскролл чата вниз при открытии клавиатуры и своих сообщениях

This commit is contained in:
evgeny committed 2026-09-14 12:14:44 +03:00
1 parent d78d652bf5
commit 369b253bdb
1 file changed
+14 -3
@@ -18,6 +18,7 @@ import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.utun.chat.data.Channel
@@ -122,13 +123,23 @@ fun ChatScreen(
initialScrolled = true
return@LaunchedEffect
}
/* новое сообщение: анимируем только если пользователь у нижнего края */
val lastVisible = listState.layoutInfo.visibleItemsInfo.lastOrNull()?.index ?: -1
if (lastIndex - lastVisible <= 1) {
/* новое сообщение: скроллим вниз если своё, либо если были у нижнего края */
val ownMessage = messages.lastOrNull()?.isOutgoing == true
val wasAtBottom = !listState.canScrollForward
if (ownMessage || wasAtBottom) {
listState.animateScrollToItem(lastIndex)
}
}
/* при открытии клавиатуры прижимаем список к низу, чтобы последнее сообщение осталось видимым */
val density = LocalDensity.current
val imeVisible = WindowInsets.ime.getBottom(density) > 0
LaunchedEffect(imeVisible) {
if (imeVisible && messages.isNotEmpty()) {
listState.scrollToItem(messages.size - 1)
}
}
Column(
modifier = Modifier.fillMaxSize().imePadding()
) {