0

我想把这个 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 答案它没有帮助。

4

0 回答 0