I want to call this Compose as startDestination
with arguments. I'm getting the below exception, but if i call this in another compose work as expected.
java.lang.IllegalArgumentException: navigation destination xxx is not a direct child of this NavGraph
implementation("androidx.navigation:navigation-compose:2.4.0-beta02")
SignInActivity
:
class SignInActivity : BaseActivity() {
@Inject
lateinit var viewModelFactory: ViewModelFactory
@ExperimentalComposeUiApi
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberAnimatedNavController()
ComposeTravelConnectTheme {
val email="test@email"
val route ="${Screens.VerifyRoute.route}/${OtpMode.EMAIL}?source=${email}"
Timber.d("$route")
Navigation(navController = navController, viewModelFactory,route)
}
}
}
//........
}
Navigation
view:
@ExperimentalComposeUiApi
@ExperimentalAnimationApi
@Composable
fun Navigation(
navController: NavHostController,
factory: ViewModelFactory,
startDestination: String = Screens.SignInOptionsScreensRoute.route
) {
AnimatedNavHost(
navController = navController,
startDestination = startDestination
) {
composable(
route = "${Screens.VerifyRoute.route}/{otpMode}?source={source}",
arguments = listOf(
navArgument("otpMode") { type = NavType.StringType },
navArgument("source") { type = NavType.StringType; defaultValue = "" },
),
enterTransition = slideInEntryTransition,
exitTransition = slideOutExitTransition,
popEnterTransition = popOutEntryTransition,
) { backStackEntry ->
val viewModel =
viewModel(modelClass = OtpVerifyViewModel::class.java, factory = factory)
viewModel.setOtpState(
otpMode = OtpMode.fromStatusValue(backStackEntry.arguments?.getString("otpMode")),
input = backStackEntry.arguments?.getString("source") ?: ""
)
OtpVerifyScreen(viewModel, navController)
}
}
}
Tried this SO answers it didn't help.