Я пытаюсь отслеживать состояние видимости клавиатуры в своем приложении чата, чтобы прокручивать ленивый столбец, содержащий мои сообщения, вниз, когда появляется клавиатура. Для этого я сохраняю WindowInsets.isImeVisible следующим образом:
Код: Выделить всё
@OptIn(ExperimentalLayoutApi::class)
@Preview(showBackground = true)
@Composable
fun ChatScreen(viewModel: ChatScreenViewModel = ChatScreenViewModel()) {
val messages = viewModel.messageListState
val listState = viewModel.messageListScrollState
val keyboardVisibility = WindowInsets.isImeVisible
Column(.....)
а вот свойства ViewModel для контекста:
Код: Выделить всё
class ChatScreenViewModel: ViewModel() {
val messageListScrollState = LazyListState()
val textFieldState = mutableStateOf("")
val messageListState = mutableStateListOf(
"dummy message 1",
"dummy message 2",
"dummy message 3",
"dummy message 4"
)
Проблема в том, что всякий раз, когда срабатывает isImeVisible (например, я нажимаю на TextField, появляется клавиатура, я что-то печатаю, а затем скрываю клавиатуру), все состояния, включая textFieldState и messageListState сбрасываются до исходных значений и теряют обновленные значения. Кажется, что даже сохранение значения isImeVisible внутри переменной вызывает проблему, и все возвращается в норму только тогда, когда я полностью удаляю его из своего кода.
Подробнее здесь:
https://stackoverflow.com/questions/781 ... state-loss