Colton Idle
08/15/2021, 5:41 PMBackHandler { myLambda() }
Even though the bottom sheet is showing, my backHandler still get triggered. What's the "right" way to prevent this?Berkeli Alashov
08/15/2021, 11:39 PMColton Idle
08/16/2021, 12:35 AMBerkeli Alashov
08/16/2021, 12:44 AMBerkeli Alashov
08/16/2021, 12:45 AMColton Idle
08/16/2021, 12:50 AMBerkeli Alashov
08/16/2021, 12:54 AMBerkeli Alashov
08/16/2021, 12:55 AMColton Idle
08/16/2021, 12:58 AMIan Lake
08/16/2021, 5:54 PMBackHandler
at all?Colton Idle
08/16/2021, 6:01 PMColton Idle
08/16/2021, 6:02 PMIan Lake
08/16/2021, 6:08 PMBackHandler(enabled = navBackStackEntry.lifecycle.currentState == Lifecycle.State.RESUMED)
Colton Idle
08/16/2021, 7:09 PMIan Lake
08/16/2021, 7:12 PMLocalLifecycleOwner.current.lifecycle
would point to the same objectColton Idle
08/16/2021, 7:17 PMBackHandler(
enabled = LocalLifecycleOwner.current.lifecycle.currentState == Lifecycle.State.RESUMED) {
myLambda()
}
Colton Idle
08/16/2021, 10:32 PMColton Idle
08/17/2021, 3:02 AMIan Lake
08/17/2021, 3:51 AMDisposableEffect
that manages a LifecycleObserver
that sets your enabled
state object)Ian Lake
08/17/2021, 3:52 AMON_RESUME
set enabled to true, ON_PAUSE
, back to false (which would be your default)Colton Idle
08/17/2021, 4:02 AMColton Idle
08/17/2021, 4:42 AMvar backEnabled by remember { mutableStateOf(false) }
val lifecycle = LocalLifecycleOwner.current.lifecycle
DisposableEffect(LocalLifecycleOwner) {
backEnabled = lifecycle.currentState == Lifecycle.State.RESUMED
onDispose {}
}
BackHandler(enabled = backEnabled) { myLabda() }
My main is was that I couldn't figure out how to call LocalLifecycleOwner.current in DisposableEffect because it's a composable itself.Ian Lake
08/17/2021, 4:45 AMColton Idle
08/17/2021, 4:46 AMIan Lake
08/17/2021, 4:48 AMvar backEnabled by remember { mutableStateOf(false) }
val lifecycle = LocalLifecycleOwner.current.lifecycle
DisposableEffect(lifecycle) {
val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME) {
backEnabled = true
else if (event == Lifecycle.Event.ON_PAUSE) {
backEnabled = false
}
}
lifecycle.addObserver(observer)
onDispose {
lifecycle.removeObserver(observer)
}
}
BackHandler(enabled = backEnabled) { myLabda() }
Colton Idle
08/17/2021, 4:52 AMIan Lake
08/17/2021, 5:11 AMLifecycleEventObserver
, whoops. Corrected the code snippet