根据这篇文章,从Navigation 2.8.0-alpha08版本开始,可以在导航中使用对象。
我正在尝试实现它,因为我需要传递一个名为
ItemUI
的对象的实例,而不是传递一个简单的值,但它对我不起作用。
这就是我一直在尝试的:
ForYouNavigation
fun NavController.navigateToForYou(navOptions: NavOptions) = navigate(FOR_YOU_ROUTE, navOptions)
@ExperimentalMaterial3AdaptiveApi
fun NavGraphBuilder.forYouScreen(onTopicClick: (ItemUI) -> Unit) {
composable(
route = FOR_YOU_ROUTE,
) {
ForYouRoute(onTopicClick = onTopicClick)
}
}
NiaNavHost
@Composable
fun NiaNavHost(
appState: NiaAppState,
onShowSnackbar: suspend (String, String?) -> Boolean,
modifier: Modifier = Modifier,
startDestination: String = FOR_YOU_ROUTE,
onReaderClick: () -> Unit
) {
val navController = appState.navController
NavHost(
navController = navController,
startDestination = startDestination,
modifier = modifier,
) {
forYouScreen(onTopicClick = navController::navigateToTodays)
// ...
}
navigateToTodays
fun NavController.navigateToTodays(topicId: ItemUI? = null, navOptions: NavOptions? = null) {
navigate(topicId, navOptions)
}
在这条线上
navigate(topicId, navOptions)
我有这个错误:
Type mismatch: inferred type is ItemUI? but TypeVariable(T) was expected
我正在遵循 Now In Android 应用程序中显示的导航样式。
navigate
不接受可为 null 的对象 - 它抱怨的是你的 navigateToTodays
方法正在传递 navigate
a ItemUI?
- 一个可为 null 的对象而不是 ItemUI
。
由于您的
onTopicClick
正确使用了非空 ItemUI
类型,因此您应该更改方法以也采用非空 ItemUI
:
fun NavController.navigateToTodays(topicId: ItemUI, navOptions: NavOptions? = null) {
navigate(topicId, navOptions)
}