CreationExtras 必须具有 `SAVED_STATE_REGISTRY_OWNER_KEY` 的值

我正在尝试在使用 Jetpack Compose 构建的应用程序中实现导航,但是当我尝试从一个屏幕导航到另一个屏幕时,我得到:

java.lang.IllegalArgumentException:CreationExtras 必须具有 SAVED_STATE_REGISTRY_OWNER_KEY 的值

我在用着:

implementation "androidx.hilt:hilt-navigation-compose:1.0.0"

这是代码:

if(viewModel.isAuthenticated) {
    navController.navigate(Screen.Profile.route)
}
stack overflow CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY`
原文答案

答案:

作者头像

@Dragan.T 的回答是正确的。

添加

实施“androidx.navigation:navigation-compose:2.5.1”

解决了我的问题。至于为什么我们需要添加,我不太确定,但它是 Android,所以任何事情都可能在这里发生。

作者头像

implementation "androidx.navigation:navigation-compose:2.5.1" 插入到您的 gradle 文件中。如果您已经拥有它,请确保它已更新为最新 (2.5.1) 版本。

作者头像

如果您将 Compose 与 Fragments 一起使用,那么您可能没有定义 viewModels() 的 Fragments 依赖项。

添加:

implementation "androidx.fragment:fragment-ktx:1.5.2"

我的 build.grade 脚本为我修复了它(以前这是一个传递依赖)。

作者头像

你可以继续使用这个库:

androidx.hilt:hilt-navigation-compose:1.0.0

只有您确定 ViewModel 在您的活动中根的 Composable 中进行了初始化。例如:

    setContent {
        AndroidLearningTheme {
            Surface(
                modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colors.background
            ) {
                HeroesScreen()
            }
        }
    }

你的可组合

@Composable
fun HeroesScreen(
    viewModel: HeroesViewModel = hiltViewModel()
)
作者头像

在我的例子中,我必须升级两个依赖项:Hilt 和 androidx.navigation。奇怪的是,升级后,错误消失了,但如果我再次降级到以前的版本,错误就不会再出现了。这些是我更改的依赖项:

    navigation_version = "2.5.3" // was 2.5.1
    dagger_hilt_version = "2.44.2" // was 2.43.2

    implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
    implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
    implementation "androidx.navigation:navigation-dynamic-features-fragment:$navigation_version"
    androidTestImplementation "androidx.navigation:navigation-testing:$navigation_version"

    implementation "com.google.dagger:hilt-android:$dagger_hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$dagger_hilt_version"
    testImplementation "com.google.dagger:hilt-android-testing:$dagger_hilt_version"
    kaptTest "com.google.dagger:hilt-android-compiler:$dagger_hilt_version"
    androidTestImplementation "com.google.dagger:hilt-android-testing:$dagger_hilt_version"
    kaptAndroidTest "com.google.dagger:hilt-android-compiler:$dagger_hilt_version"