MutableStateFlow 未在 @Composable 上更新

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

目前我有一个 WebAppInterface 来检测 Web 事件,这样的 WebAppInterface 在 @Composable WebView 内部调用,在 WebAppInterface 内部我有一个已成功检查的函数,该函数检测 Web 事件并在类中更新变量

eventNumber
是一个
StateFlow<Int>
,但是在 @Composoable 内部,当我尝试对该变量的值的变化做出反应时,什么也没有发生。这是我的代码:

    class WebAppInterface {
    
        private var _eventNumber: MutableStateFlow<Int> = MutableStateFlow(0)
        val eventNumber: StateFlow<Int> = _eventNumber
    
    
        @JavascriptInterface
        fun createFirebaseEvent(name: String, params: String) {
            val gson = Gson()
            val mapType = object : TypeToken<Map<String, Any>>() {}.type
            val paramMap: Map<String, Any> = gson.fromJson(params, mapType)
    //        firebaseTracker.trackEvent(name, paramMap)
    
            CoroutineScope(Dispatchers.IO).launch {
                _eventNumber.emit(_eventNumber.value + 1)
                Log.i("TAGGED", "createFirebaseEvent: ${eventNumber.value}")
                number = number +1
            }
        }
    }

这里是可组合的

@Composable
fun DisplayDialog() {
    val numberEvent by webAppInterface.eventNumber.collectAsState()

//I have tried this way initially 
 LaunchedEffect(numberEvent) {
        Log.i("TAGGED", "Dialog: $numberEvent")
    }
    
 LaunchedEffect(numberEvent) {
        Log.i("TAGGED", "Dialog: $numberEvent")
    }
}
kotlin android-jetpack-compose kotlin-coroutines kotlin-stateflow mutablestateflow
1个回答
0
投票

可变状态流允许您直接更新值。

将视图模型块更改为此:

CoroutineScope(Dispatchers.IO).launch {
                _eventNumber.value += 1
                Log.i("TAGGED", "createFirebaseEvent: ${eventNumber.value}")
                number = number +1
            }
© www.soinside.com 2019 - 2024. All rights reserved.