android StateFlow的更新未传播到Jetpack编写UI

np8igboo  于 2023-01-15  发布在  Android
关注(0)|答案(1)|浏览(161)

我在一个超小的游戏应用程序上尝试了Android上的Jetpack Compose和视图模型,以及StateFlow,我已经按照代码库进行了操作,但是当我更新状态时,UI上没有任何React。我确信我错过了一些愚蠢的东西,但是我看不到它。下面是我在视图模型中的代码:

private val _uiState = MutableStateFlow(HomeScreenState())
    val uiState = _uiState.asStateFlow()

...

    private fun popLists() {
        uiState.value.apply {
            currentLetters = lettersList.pop()
            where = wordPartsList.pop()
        }
    }

在我做的应用程序的屏幕上

val gameUiState by viewModel.uiState.collectAsState()

然后在组合物中

BombDisplay(gameUiState.currentLetters, context)

BombDisplay是一个简单的自定义可组合文本与预定义的风格和背景。“HomeScreenState”也是一个简单的数据类与夫妇字符串在它。
还有一个按钮,当按下它时,它会从视图模型调用一个公共方法,该方法调用“popList”函数。我使用调试器跟踪了整个过程,它实际上都工作了,但UI似乎没有意识到数据的更改。
我已经追溯了各种代码库和教程中的所有步骤,但我不知道错误在哪里。

tpgth1q7

tpgth1q71#

问题出在popLists方法中,u应该传递新值,而不是更新旧值,smth如下所示:

private fun popLists() {
    val newState = uiState.value.copy(
        currentLetters = lettersList.pop(),
        where = wordPartsList.pop()
    )
    uiState.value = newState
}

相关问题