I've got a simple navhost that looks like this:
@Composable
fun NavigationComponent(
navController: NavHostController,
context: Context,
) {
NavHost(
navController = navController,
startDestination = Screen.MainScreen.route
) {
composable(Screen.MainScreen.route) {
MainScreen(navController = navController)
}
composable(
route = Screen.NewPlanScreen.route,
) {
NewPlanScreen(context = context, navController = navController)
}
}
}
It is called from main activity like this:
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@OptIn(ExperimentalAnimationApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val context = this
val navController: NavHostController = rememberNavController()
MainTheme(
darkTheme = isDarkMode.value
) {
Box(
modifier = Modifier
.fillMaxSize()
.background(AppTheme.colors.primaryBackground)
) {
NavigationComponent(navController = navController, context = context)
}
}
}
}
}
NewPlanScreen has a viewmodel that is provided by dagger hilt:
@Composable
fun NewPlanScreen(
viewModel: NewPlanScreenViewModel = hiltViewModel(),
navController: NavController,
context: Context
) {
//...
}
Also, the NewPlanScreenViewModel has a @HiltViewModel annotation and an injected constructor.
And in the MainScreen I use
navController.navigate(Screen.NewPlanScreen.route)
but when I press a back button on a phone to navigate back to main screen and then call the
navController.navigate(Screen.NewPlanScreen.route)
again, a new ViewModel for a NewPlan is created. What am I doing wrong?