目前我有一个 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")
}
}
可变状态流允许您直接更新值。
将视图模型块更改为此:
CoroutineScope(Dispatchers.IO).launch {
_eventNumber.value += 1
Log.i("TAGGED", "createFirebaseEvent: ${eventNumber.value}")
number = number +1
}