Se7eN
10/30/2020, 10:23 AMjava.lang.UnsupportedOperationException: Parcelables don't support default values.
at androidx.navigation.NavType$ParcelableType.parseValue(NavType.java:679)
at androidx.navigation.NavType.parseAndPut(NavType.java:96)
at androidx.navigation.NavDeepLink.parseArgument(NavDeepLink.java:306)
at androidx.navigation.NavDeepLink.getMatchingArguments(NavDeepLink.java:260)
at androidx.navigation.NavDestination.matchDeepLink(NavDestination.java:474)
at androidx.navigation.NavGraph.matchDeepLink(NavGraph.java:79)
at androidx.navigation.NavController.navigate(NavController.java:1025)
at androidx.navigation.NavController.navigate(NavController.java:1008)
at androidx.navigation.NavController.navigate(NavController.java:994)
at androidx.navigation.compose.NavHostControllerKt.navigate(NavHostController.kt:100)
This is my code:
composable(Routing.Root.Main.route) {
Routing.Root.Main.Content(
onChatClick = { user ->
navController.navigate("${Routing.Root.Conversation.route}/${user}")
}
)
}
composable(
"${Routing.Root.Conversation.route}/{user}",
arguments = listOf(navArgument("user") { type = NavType.ParcelableType(User::class.java) })
) { backStackEntry ->
backStackEntry.arguments?.getParcelable<User>("user")?.let { user ->
Routing.Root.Conversation.Content(user = user)
}
}
And this is the User class:
@Parcelize
data class User(
val name: Name,
val picture: Picture
) : Parcelable
@Parcelize
data class Name(
val first: String,
val last: String,
val title: String
) : Parcelable
@Parcelize
data class Picture(
val large: String,
val medium: String,
val thumbnail: String
) : Parcelable
I know @Ian Lake suggested using IDs but I don't wanna bother with that right now for a sample app. How can I fix this?Alberto
10/30/2020, 10:36 AMManuel Lorenzo
10/30/2020, 10:42 AMIan Lake
10/30/2020, 3:26 PMSe7eN
10/30/2020, 3:34 PMNavType.ParcelableType
exist?Ian Lake
10/30/2020, 3:41 PMSe7eN
10/30/2020, 3:42 PMIan Lake
10/30/2020, 3:47 PMSe7eN
10/30/2020, 3:48 PMColton Idle
10/30/2020, 6:48 PMIan Lake
10/30/2020, 7:59 PMinterface Repository { fun getUser(name: String): User }
, create an implementation that returns fake data, and add that to your composable's parameters. You also get a free, testable layer you can continue to use when you have a real implementation 🙃Manuel Lorenzo
10/31/2020, 2:21 PMIan Lake
10/31/2020, 3:18 PMJordi Saumell
11/09/2020, 10:40 PMIan Lake
11/09/2020, 10:47 PMJordi Saumell
11/10/2020, 7:49 PMDilraj Singh
11/26/2021, 6:28 PMIntArray
Ian Lake
11/27/2021, 2:07 AM