kiwicom / navigation-compose-typed

Type-safe arguments for Jetpack Navigation Compose using Kotlinx.Serialization
MIT License
220 stars 9 forks source link

NullPointerException Occurs When URL Missing Parameters with Default Values #142

Open sonatard opened 3 weeks ago

sonatard commented 3 weeks ago
sealed interface NavItem : Destination {
  data class X(
        val id: String,
        val enabled: Boolean = true, //default value
    ) : NavItem
}
        composable<NavItem.X>(
            deepLinks =
                listOf(
                    navDeepLink {
                        uriPattern = "${context.packageName}://x?id={id}" // no default value
                    }
                )
        ) {
            X(
                id = id,
                enabled = enabled,
            )
        }
Process: com.xxx.devstorefrontmobile, PID: 17824
java.lang.NullPointerException
at com.kiwi.navigationcompose.typed.internal.UriBundleDecoder.decodeBoolean(UriBundleDecoder.kt:56)
at kotlinx.serialization.encoding.AbstractDecoder.decodeBooleanElement(AbstractDecoder.kt:50)
at com.xxx.android.components.NavItem$X$$serializer.deserialize(NavItem.kt:64)
at com.xxx.android.components.NavItem$X$$serializer.deserialize(NavItem.kt:64)
at kotlinx.serialization.encoding.Decoder$DefaultImpls.decodeSerializableValue(Decoding.kt:257)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:16)
at com.kiwi.navigationcompose.typed.internal.UriBundleDecoder.decodeSerializableValue(UriBundleDecoder.kt:29)
at com.kiwi.navigationcompose.typed.NavBuilderKt.decodeArguments(NavBuilder.kt:234)
at com.kiwi.navigationcompose.typed.NavBuilderKt$composable$1.invoke(NavBuilder.kt:77)
at com.kiwi.navigationcompose.typed.NavBuilderKt$composable$1.invoke(NavBuilder.kt:76)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:173)
at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:172)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:248)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)
at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65)
at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47)
at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:172)
at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:146)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.animation.CrossfadeKt$Crossfade$5$1.invoke(Crossfade.kt:133)
at androidx.compose.animation.CrossfadeKt$Crossfade$5$1.invoke(Crossfade.kt:128)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:142)
at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:73)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:146)
at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:13)
at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:10)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:192)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2556)
at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2850)