myanmarking
06/04/2021, 3:12 PMzhuinden
06/04/2021, 3:17 PMmyanmarking
06/04/2021, 3:19 PMval navController = rememberNavController()
val screen1ViewModel = viewModel<Screen1ViewModel>()
val screen2ViewModel = viewModel<Screen2ViewModel>()
val screen3ViewModel = viewModel<Screen3ViewModel>()
...
NavHost(
navController,
startDestination = MainScreen.Screen1.route,
modifier = Modifier.padding(top = 16.dp, bottom = 16.dp)
) {
composable(MainScreen.Screen1.route) { Screen.Screen1(screen1ViewModel) }
composable(MainScreen.Screen2.route) { Screen.Screen2(screen2ViewModel) }
composable(MainScreen.Screen3.route) { Screen.Screen3(screen3ViewModel) }
}
}
zhuinden
06/04/2021, 3:19 PMmyanmarking
06/04/2021, 3:31 PMinterface LazyViewModel<T : ViewModel> {
@Composable
fun get(): T
}
class LazyViewModelImpl<T : ViewModel>(
private val viewModelClass: Class<T>
) : LazyViewModel<T> {
private var viewModel: T? = null
@Composable
override fun get(): T {
check(Looper.getMainLooper() == Looper.myLooper())
if (viewModel == null) {
viewModel = viewModel(viewModelClass)
}
return viewModel!!
}
}
@Composable
inline fun <reified T : ViewModel> lazyViewModel(): LazyViewModel<T> {
return LazyViewModelImpl(T::class.java)
}
Zun
06/04/2021, 3:39 PMmyanmarking
06/04/2021, 3:40 PMIan Lake
06/04/2021, 3:45 PMmyanmarking
06/04/2021, 3:48 PMrestoreState?
Ian Lake
06/04/2021, 4:46 PMsaveState
and restoreState
flags exactly as mentioned in the docs: https://developer.android.com/jetpack/compose/navigation#bottom-navrobnik
06/04/2021, 7:07 PMinit
, which tab you're in? I can get the navigation args there, but I feel like need access to the navigation stack (of routes). ?Ian Lake
06/04/2021, 7:22 PMViewModelStoreOwner
, so it has its own set of ViewModel instances. Generally, every ViewModel class should only expose the exact set of data needed to populate a single particular screen / store the data of one navigation graph, so you'd always know what destination you're onrobnik
06/04/2021, 8:05 PM