I am sharing the same ViewModel between AppsScreen...
# compose
l
I am sharing the same ViewModel between AppsScreen and HomeScreen of Compose and passing data from AppScreen using navigation and want to receive in the HomeViewModel using SaveStateHandle but getting the null value always.
Copy code
@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
Copy code
backStackEntry.savedStateHandle[APP_ID_ARG] = entry.arguments?.getString(APP_ID_ARG)
Passing data using the navigation
Copy code
navController.navigate("${Destinations.HOME}/$appID")
ViewModel
Copy code
@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)
                }
            }
        }
    }
}