compose-multiplatform
compose-multiplatform copied to clipboard
Compose for Desktop doesn't emit lifecycle events, only states
1.6.10-rc03.
iOS:
Desktop:
Observed via:
@Composable
fun LifecycleLogger() {
val lc = LocalLifecycleOwner.current
LaunchedEffect(lc) {
launch {
lc.lifecycle.currentStateFlow.collect {
println("New State: $it")
}
}
launch {
lc.lifecycle.eventFlow.collect {
println("New Event: $it")
}
}
}
}
Looking at the impl of eventFlow
:
public val Lifecycle.eventFlow: Flow<Lifecycle.Event>
get() = callbackFlow {
val observer = LifecycleEventObserver { _, event ->
trySend(event)
}.also { addObserver(it) }
awaitClose { removeObserver(observer) }
}.flowOn(Dispatchers.Main.immediate)
Apparently it uses Dispatchers.Main
, which is not available if you don't add coroutines-swing
to the project explicitly. Adding this dependency fixes the issue:
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.8.1")
Very strange that I'm seeing no indication (warning, error, log output) indicating this.
It's expected because kotlinx-coroutines-swing
is optional. I'll check why a warning message is missed + make sure that it's desired in docs