我想把这个 Compose 称为startDestination
带参数。我得到了以下异常,但是如果我按预期在另一个撰写工作中调用它。
java.lang.IllegalArgumentException:导航目的地 xxx 不是此 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
看法:
@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)
}
}
}
试过这个SO 答案它没有帮助。