feat: add LifecycleEffect for future use
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
f9f2f60f35
commit
54413154a6
|
|
@ -0,0 +1,27 @@
|
||||||
|
package chat.revolt.internals.extensions
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
|
import androidx.compose.runtime.rememberUpdatedState
|
||||||
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
|
import androidx.lifecycle.LifecycleOwner
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun LifecycleEffect(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit) {
|
||||||
|
val eventHandler = rememberUpdatedState(onEvent)
|
||||||
|
val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
|
||||||
|
|
||||||
|
DisposableEffect(lifecycleOwner.value) {
|
||||||
|
val lifecycle = lifecycleOwner.value.lifecycle
|
||||||
|
val observer = LifecycleEventObserver { owner, event ->
|
||||||
|
eventHandler.value(owner, event)
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycle.addObserver(observer)
|
||||||
|
onDispose {
|
||||||
|
lifecycle.removeObserver(observer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue