Skip to content

Instantly share code, notes, and snippets.

@ifucolo
Last active August 22, 2025 11:41
Show Gist options
  • Select an option

  • Save ifucolo/72657d21a6de3ed28a7aecbf8ae66730 to your computer and use it in GitHub Desktop.

Select an option

Save ifucolo/72657d21a6de3ed28a7aecbf8ae66730 to your computer and use it in GitHub Desktop.
@Composable
fun HomeRouteComponent(
onShowNavigationBar: (Boolean) -> Unit = {}
) {
val backStack = rememberNavBackStack<HomeSubRoute>(HomeSubRoute.HomeRoute)
NavDisplay(
backStack = backStack,
onBack = { keysToRemove -> repeat(keysToRemove) { backStack.removeLastOrNull() } },
entryDecorators = listOf(
rememberSceneSetupNavEntryDecorator(),
rememberSavedStateNavEntryDecorator(),
rememberViewModelStoreNavEntryDecorator()
),
entryProvider = entryProvider {
onShowNavigationBar(backStack.lastOrNull() == HomeSubRoute.HomeRoute)
entry<HomeSubRoute.HomeRoute> {
HomeScreen(
onNovenaClicked = { novena ->
backStack.add(HomeSubRoute.NovenaRoute(novenaName = novena.name))
},
onChapletClicked = { chaplet ->
backStack.add(HomeSubRoute.ChapletRoute(chapletName = chaplet.name))
},
onLiturgyClicked = { liturgy ->
backStack.add(HomeSubRoute.LiturgyRoute)
},
onSaintClicked = { saint ->
backStack.add(HomeSubRoute.SaintRoute(saint = saint))
},
onPhraseClicked = { phrase ->
backStack.add(HomeSubRoute.PhraseOfDayRoute(phrase = phrase))
},
onPlanClicked = { plan ->
backStack.add(HomeSubRoute.PlanFlow(planName = plan.name))
},
onSubPlanClicked = { subPlan ->
backStack.add(
HomeSubRoute.PlanFlow(
planName = subPlan.planName,
subPlanName = subPlan.name
)
)
},
onPrayerClicked = { prayer ->
backStack.add(HomeSubRoute.PrayerRoute(prayerName = prayer.name))
},
)
}
entry<HomeSubRoute.LiturgyRoute> { route ->
LiturgyFlowRouteComponent(
onClose = { backStack.removeLastOrNull() }
)
}
entry<HomeSubRoute.SaintRoute> { route ->
SaintDetailScreen(
saint = route.saint,
onBackClick = { backStack.removeLastOrNull() }
)
}
entry<HomeSubRoute.PhraseOfDayRoute> { route ->
VersicleOfTheDayScreen(
phraseDay = route.phrase,
onBackClick = { backStack.removeLastOrNull() }
)
}
entry<HomeSubRoute.PrayerRoute> { route ->
PrayerDetailScreen(
prayerName = route.prayerName,
onBackClick = { backStack.removeLastOrNull() }
)
}
entry<HomeSubRoute.ChapletRoute> { route ->
ChapletFlowRouteComponent(
chapletName = route.chapletName,
onClose = { backStack.removeLastOrNull() }
)
}
entry<HomeSubRoute.NovenaRoute> { route ->
NovenaFlowRouteComponent(
novenaName = route.novenaName,
onClose = { backStack.removeLastOrNull() }
)
}
entry<HomeSubRoute.PlanRoute> {
PlanFlowRouteComponent(
planName = it.planName,
subPlanName = it.subPlanName,
onClose = { backStack.removeLastOrNull() }
)
}
},
transitionSpec = {
slideInHorizontally(initialOffsetX = { it }) togetherWith
slideOutHorizontally(targetOffsetX = { -it })
},
popTransitionSpec = {
slideInHorizontally(initialOffsetX = { -it }) togetherWith
slideOutHorizontally(targetOffsetX = { it })
},
predictivePopTransitionSpec = {
slideInHorizontally(initialOffsetX = { -it }) togetherWith
slideOutHorizontally(targetOffsetX = { it })
}
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment