在 Compose NavHost 中实现导航类型安全时出现错误“类型不匹配:推断类型是...但需要 TypeVariable(T)”

问题描述 投票:0回答:1

根据这篇文章,从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 应用程序中显示的导航样式。

android android-jetpack-compose android-navigation
1个回答
0
投票

navigate
不接受可为 null 的对象 - 它抱怨的是你的
navigateToTodays
方法正在传递
navigate
a
ItemUI?
- 一个可为 null 的对象而不是
ItemUI

由于您的

onTopicClick
正确使用了非空
ItemUI
类型,因此您应该更改方法以也采用非空
ItemUI
:

fun NavController.navigateToTodays(topicId: ItemUI, navOptions: NavOptions? = null) {
    navigate(topicId, navOptions)
}
© www.soinside.com 2019 - 2024. All rights reserved.