Skip to content

Commit

Permalink
addressing reviews
Browse files Browse the repository at this point in the history
  • Loading branch information
DevSrSouza committed Jun 4, 2024
1 parent 3a64a07 commit 7eb62ca
Showing 1 changed file with 14 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.core.screen.ScreenKey
import cafe.adriel.voyager.core.stack.StackEvent
import cafe.adriel.voyager.navigator.Navigator

Expand Down Expand Up @@ -139,11 +138,12 @@ public fun ScreenTransition(

val currentScreens = navigator.items

DisposableEffect(currentScreens) {
onDispose {
val newScreenKeys = navigator.items.map { it.key }
screenCandidatesToDispose.value += currentScreens.filter { it.key !in newScreenKeys }
.map { ScreenData(it.key, it) }
if (disposeScreenAfterTransitionEnd) {
DisposableEffect(currentScreens) {
onDispose {
val newScreenKeys = navigator.items.map { it.key }
screenCandidatesToDispose.value += currentScreens.filter { it.key !in newScreenKeys }
}
}
}

Expand All @@ -167,17 +167,15 @@ public fun ScreenTransition(
},
modifier = modifier
) { screen ->
if (this.transition.targetState == this.transition.currentState) {
if (this.transition.targetState == this.transition.currentState && disposeScreenAfterTransitionEnd) {
LaunchedEffect(Unit) {
if (disposeScreenAfterTransitionEnd) {
val newScreens = navigator.items.map { it.key }
val screensToDispose = screenCandidatesToDispose.value.filterNot { it.key in newScreens }
if (screensToDispose.isNotEmpty()) {
screensToDispose.forEach { navigator.dispose(it.screen) }
navigator.clearEvent()
}
screenCandidatesToDispose.value = emptySet()
val newScreens = navigator.items.map { it.key }
val screensToDispose = screenCandidatesToDispose.value.filterNot { it.key in newScreens }
if (screensToDispose.isNotEmpty()) {
screensToDispose.forEach { navigator.dispose(it) }
navigator.clearEvent()
}
screenCandidatesToDispose.value = emptySet()
}
}

Expand All @@ -187,12 +185,7 @@ public fun ScreenTransition(
}
}

private data class ScreenData(
val key: ScreenKey,
val screen: Screen
)

private fun screenCandidatesToDisposeSaver(): Saver<MutableState<Set<ScreenData>>, List<ScreenData>> {
private fun screenCandidatesToDisposeSaver(): Saver<MutableState<Set<Screen>>, List<Screen>> {
return Saver(
save = { it.value.toList() },
restore = { mutableStateOf(it.toSet()) }
Expand Down

0 comments on commit 7eb62ca

Please sign in to comment.