启动应用程序时,currentBackStackEntry参数为null



在一个compose应用程序中,我试图更新currentBackStackEntry的参数。这只是一个次要项目。我知道:

navController.currentBackStackEntry?.arguments?.putParcelable(
"comic",
selectedComic
)

我知道我可能应该使用空间来保持值,只传递id和/或使用其他组合导航库(如组合目的地或appyx(,而不是以这种方式传递parcelables,但我希望通过组合导航保持简单,而不在url中串行化。

问题是代码并不总是有效的,我不明白为什么当它第一次加载时,因为第一个目的地navController.currentBackStackEntry?.argumentsnull,所以代码不起作用。在导航到任何其他可组合的代码后,如果我回到这个代码,并且执行了相同的代码,那么参数不是null,并且该代码似乎总是有效的。

我有什么想法可以做,这样在应用程序第一次运行时,争论就不会是空的吗?我也想知道为什么会发生这种事。我几天来一直在想办法弄清楚发生了什么事,然后才来问。

问题是,当它第一次作为第一个目标navController.currentBackStackEntry加载时,代码并不总是有效,我不明白为什么?。arguments为null,因此代码不起作用。

该方法的文档说明(emphasis mine(:

后堆栈上最顶层的条目或如果后堆栈为空则为null

当"它加载第一时间作为第一目的地";从定义上讲,这是意料之中的事,所以这是意料之内的事。

此外,currentBackStackEntry.arguments的文档指出:

请注意,NavBackStackEntry的参数是不可变的,并且在您导航((到目的地时定义-您对此Bundle所做的更改将不会反映在此属性的未来调用中。

因此,尝试将内容放入Bundle似乎无论如何都是不正确的。

有什么想法吗?我可以做些什么,让应用程序第一次运行时参数不为空?

我自己没有使用Nav库,但只是从阅读文档中了解到,也许currentDestination.arguments是你想要的?

您可以使用我自己的实现来进行jetpack组合导航:https://github.com/usmonie/compose_navigation_with_parcelable_arguments

使用rememberNavExtrasController创建控制器,NavExtrasHost和com.usmonie.compose.navigation.compositable用于传递带有参数的捆绑包。

最新更新