Lokik Soni
01/06/2024, 6:43 PMLokik Soni
01/06/2024, 6:45 PM@Composable
fun ANNavHost(
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
startDestination: String,
route: String = HOME_ROUTE
) {
NavHost(
modifier = modifier,
navController = navController,
startDestination = startDestination,
route = route
) {
composable(
route = Destinations.APPS
) { entry ->
val backStackEntry = remember(entry) {
navController.getBackStackEntry(HOME_ROUTE)
}
// Get the same instance every time
val homeViewModel: HomeViewModel = hiltViewModel(backStackEntry)
AppsScreen(
homeViewModel = homeViewModel,
navController = navController
)
}
composable(
route = "${Destinations.HOME}/{$APP_ID_ARG}"
) { entry ->
val backStackEntry = remember(entry) {
navController.getBackStackEntry(HOME_ROUTE)
}
// Setting the appID in the savedStateHandle
backStackEntry.savedStateHandle[APP_ID_ARG] = entry.arguments?.getString(APP_ID_ARG)
// Get the same instance every time
val homeViewModel: HomeViewModel = hiltViewModel(backStackEntry)
HomeScreen(
homeViewModel = homeViewModel
)
}
}
}
Don't know if this will work or not but setting the value to SaveStateHandle like this
backStackEntry.savedStateHandle[APP_ID_ARG] = entry.arguments?.getString(APP_ID_ARG)
Passing data using the navigation
navController.navigate("${Destinations.HOME}/$appID")
ViewModel
@HiltViewModel
class HomeViewModel @Inject constructor(
private val _savedStateHandle: SavedStateHandle,
): ViewModel() {
fun onEvent(event: HomeEvent) {
when(event) {
HomeEvent.OnAppsRefresh -> {
getAppsID(refresh = true)
}
HomeEvent.OnHomePageRefresh -> {
val _appID = _savedStateHandle.get<String>(DestinationsArgs.APP_ID_ARG)
_appID?.let {
getData(appID = it, refresh = true)
}
}
}
}
}