我在一个超小的游戏应用程序上尝试了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似乎没有意识到数据的更改。
我已经追溯了各种代码库和教程中的所有步骤,但我不知道错误在哪里。
1条答案
按热度按时间tpgth1q71#
问题出在popLists方法中,u应该传递新值,而不是更新旧值,smth如下所示: