【问题标题】:Navigation destination that matches request NavDeepLinkRequest cannot be found in the navigation graph NavGraph在导航图 NavGraph 中找不到与请求 NavDeepLinkRequest 匹配的导航目的地
【发布时间】:2022-04-07 16:14:23
【问题描述】:

我有一个如下所示的 NavGraph:

@Composable
fun NavGraph (
    navController: NavHostController
) {
    NavHost(
        navController = navController,
        startDestination = "Products"
    ) {
        composable(
            route = "Products"
        ) {
            ProductsScreen(
                navController = navController
            )
        }
        composable(
            route = "Product Details",
            arguments = listOf(
                navArgument("product") {
                    type = NavType.SerializableType(Product::class.java)
                }
            )
        ) {
            val product = navController.previousBackStackEntry?.arguments?.getSerializable("product") as Product
            ProductDetailsScreen(
                navController = navController,
                product = product
            )
        }
    }
}

在 ProductDetailsS​​creen 中,我希望单击产品以进一步导航到传递产品对象的详细信息屏幕:

LazyColumn {
    items(
        items = products
    ) { product ->
        ProductCard(
            product = product,
            onProductClick = {
                navController.currentBackStackEntry?.arguments?.putSerializable("product", product)
                navController.navigate("Product Details")
            }
        )
    }
}

产品完美显示,但当我点击产品时,应用程序因以下错误而崩溃:

java.lang.IllegalArgumentException:在导航图中找不到与请求 NavDeepLinkRequest{ uri=android-app://androidx.navigation/Product Details } 匹配的导航目的地 NavGraph(0x0) startDestination={Destination(0xb543811) route =产品}

谁能帮忙?

附:我也关注了这个answer,但没有运气:(

【问题讨论】:

  • 您可以删除空间。例如更改“产品详细信息”->“产品详细信息”
  • @Alexander 感谢您的评论。我刚做了,没用。我什至删除了整个第二个单词 (Details) + 以及空格,并且行为相同。还有其他想法吗?
  • 当然)只需删除所有参数并打开一个空屏幕。比如“产品”。如果可行,您可以添加一个参数
  • @Alexander 是的,如果我删除它们,我可以打开 ProductDetailsS​​creen。

标签: android kotlin android-jetpack-compose jetpack-compose-navigation


【解决方案1】:

这是我的样本

@ExperimentalPagerApi
@Composable
fun WallNavigation(nameFolder: String, paths: List<String>) {
   val navController = rememberNavController()
   val model: ImageViewModel = viewModel()
   model.setFolder(nameFolder)
   model.setFileNames(paths)

   NavHost(navController = navController, startDestination = Screen.MainScreen.route) {
    composable(Screen.MainScreen.route) {
        MainScreen(navController = navController, model)
    }

    composable(route = Screen.GalleryScreen.route + "/{position}", arguments = listOf(navArgument(name = "position") {
        type = NavType.IntType
        defaultValue = -1
        nullable = false
    })) { entity ->
        GalleryScreen(navController = navController, position = entity.arguments?.getInt("position") ?: -1, imageViewModel = model)
    }

    composable(route = Screen.CropScreen.route) {
        CropScreen(navController = navController, imageViewModel = model)
    }
  }
} 

sealed class Screen(val route : String) {
    object MainScreen : Screen("main_screen")
    object GalleryScreen : Screen("gallery_screen")
    object CropScreen : Screen("crop_screen")

    fun withArgs(vararg args: String):String {
       return buildString {
          append(route)
          args.forEach { arg ->
              append("/$arg")
          }
        }
     }
}

【讨论】:

  • 让我试着理解并回复你。谢谢
  • 不幸的是,它对我不起作用,因为我需要将Product 类型的整个对象从一个屏幕发送到另一个屏幕。
  • @JoanP。没问题,只需使用 ViewModel。您可以发送产品的 id。您可以从 ViewModel 获得的整个产品。我在我的示例中执行相同的操作。
  • 您是否也将其转换为 JSON 字符串?为你的努力投票。
【解决方案2】:

This answer 很好地解释了如何通过撰写导航传递可打包的参数。

您在上面描述的错误消息the navigation destination that matches request NavDeepLinkRequest cannot be found in the navigation graph NavGraph 也可能出现在您想要交出可选参数忘记使其可为空时。

  arguments: List<NamedNavArgument> = listOf(
            navArgument("product") {
                type = Product.NavigationType //check out the linked answer to know how to write the Product.NavigationType
                nullable = true
            }
        )

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2017-09-07
    相关资源
    最近更新 更多