ursus
04/18/2026, 12:48 AMNav3 backstack, something like
class AppNavigator(
val backStack: NavBackStack<NavKey>
) {
fun navigate(route: NavKey) {
backStack.add(element = route)
}
fun goBack() {
backStack.removeLastOrNull()
}
}
how do I most idiomatically manage the instance?
1) Do I just new it up every recomposition since its effectively stateless simce backstack itself will be remembered already?
2) Do I somehow make it serializable the way NavBackStack is, so it all can live in one rememberSerializable (and then not usimg rememberNavBackStack pbviously)
3) Do I create two “adjacent” remembers where the latter is keyed by the former?
@Composable
fun rememberAppNavigator(): AppNavigator {
val backStack = rememberNavBackStack(Home)
return remember(backStack) {
AppNavigator(backStack = backStack)
}
}Ernestas
04/23/2026, 6:05 AMnavController from there.ursus
04/23/2026, 1:25 PM@Composable
fun rememberAppNavigator(): AppNavigator {
val backStack = rememberNavBackStack(Home)
return remember(backStack) {
AppNavigator(backStack = backStack)
}
}
this is what one of the nav3 recipes does btw