IsImeVisible вызывает потерю состоянияAndroid

Форум для тех, кто программирует под Android
Anonymous
IsImeVisible вызывает потерю состояния

Сообщение Anonymous »

Я пытаюсь отслеживать состояние видимости клавиатуры в своем приложении чата, чтобы прокручивать ленивый столбец, содержащий мои сообщения, вниз, когда появляется клавиатура. Для этого я сохраняю 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

Вернуться в «Android»