簡體   English   中英

StateFlow 的更新未傳播到 Jetpack Compose UI

[英]Update of StateFlow not propagating to the Jetpack Compose UI

我正在 Android 上嘗試 Jetpack Compose,在一個超小型游戲應用程序上使用視圖模型和 StateFlow,並且我遵循了代碼實驗室,但是當我更新我的 state 時,UI 上沒有任何反應。 我確定我錯過了一些愚蠢的東西,但我看不到它。 這是我在視圖 model 中的代碼:

    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”也是一個簡單的數據 class,其中包含幾個字符串。

還有一個按鈕,按下時會從調用“popList”function 的視圖模型調用公共方法。我用調試器跟蹤了整個過程,它確實有效,但用戶界面似乎沒有意識到數據的變化。

我已經從各種代碼實驗室和教程中追溯了所有步驟,但我不知道錯誤在哪里。

問題出在 popLists 方法中。 你應該傳遞新值而不是更新舊值,就像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM