Lasse Magnussen
04/06/2022, 1:53 PMIan Lake
04/06/2022, 4:38 PMTo put it plainly, I want to just serialise my parcelables, base64 encode them, and pass them through. At least until a viable official alternative is in place.That's already officially supported, with whatever encoding you want: https://developer.android.com/guide/navigation/navigation-kotlin-dsl#custom-types
Ian Lake
04/06/2022, 4:39 PMLasse Magnussen
04/07/2022, 2:07 AMIan Lake
04/07/2022, 2:11 AMLasse Magnussen
04/07/2022, 10:23 AMIan Lake
04/07/2022, 3:55 PMIan Lake
04/07/2022, 3:56 PMIan Lake
04/07/2022, 4:22 PMLasse Magnussen
04/12/2022, 8:13 AMIan Lake
04/12/2022, 1:08 PMLasse Magnussen
04/12/2022, 2:19 PMNavigator
which is a ViewModel
which just caches these arguments, and also has access to a NavController
— really rubbed me the wrong way.
I can get on board with ViewModel scoped to a sensible place in the navigation graph.
Just so we’re on the same page, this is now the recommended way to access the back stack entry?
composable("A") {
ScreenA(hiltViewModel(it))
}
composable("B") {
val parentBackStackEntry = remember(it) { navController.getBackStackEntry("A") }
ScreenB(hiltViewModel(parentNavBackStackEntry))
}
composable("C") {
val previousBackStackEntry = remember(it) { navController.previousBackStackEntry }
ScreenC(hiltViewModel(previousBackStackEntry))
}
// Or nested navigation where we say "A" is the owner:
navigation(startDestination = "A", route = "HOME") {
composable("A") {
ScreenA(hiltViewModel(it))
}
composable("B") {
val parentBackStackEntry = remember(it) { navController.getBackStackEntry("A") }
ScreenB(hiltViewModel(parentBackStackEntry))
}
}
Ian Lake
04/12/2022, 2:31 PM"HOME"
via getBackStackEntry("HOME")
Lasse Magnussen
04/12/2022, 2:31 PMLasse Magnussen
04/12/2022, 2:33 PMcomposable("A") {
ScreenA(hiltViewModel(it))
}
composable("B") {
val parentBackStackEntry = remember(it) { navController.getBackStackEntry("A") }
ScreenB(hiltViewModel(parentBackStackEntry))
}
composable("C") {
val parentBackStackEntry = remember(it) { navController.getBackStackEntry("A") }
ScreenC(hiltViewModel(parentBackStackEntry))
}
// Or nested navigation where we say "A" is the owner:
navigation(startDestination = "A", route = "HOME") {
composable("A") {
ScreenA(hiltViewModel(it))
}
composable("B") {
val parentBackStackEntry = remember(it) { navController.getBackStackEntry("A") }
ScreenB(hiltViewModel(parentBackStackEntry))
}
composable("C") {
val parentBackStackEntry = remember(it) { navController.getBackStackEntry("A") }
ScreenC(hiltViewModel(parentBackStackEntry))
}
}
Ian Lake
04/12/2022, 2:33 PMLasse Magnussen
04/12/2022, 2:33 PMIan Lake
04/12/2022, 2:34 PMnavigation
element as one of themIan Lake
04/12/2022, 2:35 PMLasse Magnussen
04/12/2022, 2:36 PMIan Lake
04/12/2022, 2:37 PMIan Lake
04/12/2022, 2:37 PMLasse Magnussen
04/12/2022, 2:37 PMnavigation(startDestination = "A", route = "HOME") {
composable("A") {
val backStackEntry = remember(it) { navController.getBackStackEntry("HOME") }
ScreenA(hiltViewModel(backStackEntry))
}
composable("B") {
val backStackEntry = remember(it) { navController.getBackStackEntry("HOME") }
ScreenB(hiltViewModel(backStackEntry))
}
composable("C") {
val backStackEntry = remember(it) { navController.getBackStackEntry("HOME") }
ScreenC(hiltViewModel(backStackEntry))
}
}
Lasse Magnussen
04/12/2022, 2:37 PMLasse Magnussen
04/12/2022, 2:40 PMLasse Magnussen
04/12/2022, 2:40 PMnavigation
builder and children vs siblings vs hiltViewModelIan Lake
04/12/2022, 2:48 PMLasse Magnussen
04/12/2022, 2:49 PM