isImeVisible 导致状态丢失

问题描述 投票:0回答:1

我试图观察聊天应用程序中键盘可见性的状态,以便在键盘出现时将包含我的消息的惰性列滚动到底部。为此,我像这样存储

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<String>(
            "dummy message 1",
            "dummy message 2",
            "dummy message 3",
            "dummy message 4"
        )

问题是,每当触发

isImeVisible
时(例如,我点击文本字段,键盘出现,我输入一些内容,然后隐藏键盘),包括
textFieldState
messageListState
在内的所有状态都会重置为其原始值并失去其更新的值。即使将
isImeVisible
值保留在变量中似乎也会导致问题,并且只有当我将其从代码中完全删除时,事情才会恢复正常。

android kotlin android-jetpack-compose android-jetpack
1个回答
0
投票

将 ViewModel 实例化方法更改为以下方法似乎已经解决了问题:

fun ChatScreen(viewModel: ChatScreenViewModel = viewModel()) 
© www.soinside.com 2019 - 2024. All rights reserved.