https://medium.com/mercadona-tech/type- ... c03e3d74a5
У меня 3 экрана:
Код: Выделить всё
@Serializable
object Home
@Serializable
object ChildA
@Serializable
data class ChildB(val customClass: CustomClass)
@Composable
fun TypeSafetyNavigation(modifier: Modifier = Modifier) {
val navController = rememberNavController()
NavHost(navController, startDestination = HomeScreen) {
composable {
HomeScreen(
modifier = modifier,
onNavChildAClick = { navController.navigate(ChildA) },
onNavChildBClick = { navController.navigate(ChildB) },
)
}
composable {
ChildAScreen(
modifier = modifier,
)
}
composable(
typeMap = mapOf(typeOf() to serializableType())
) { backStackEntry ->
val bookDetail = backStackEntry.toRoute()
ChildBScreen(
modifier = modifier,
customClass = customClass,
)
}
}
}
Код: Выделить всё
inline fun serializableType(
isNullableAllowed: Boolean = false,
json: Json = Json,
) = object : NavType(isNullableAllowed = isNullableAllowed) {
override fun get(bundle: Bundle, key: String) =
bundle.getString(key)?.let(json::decodeFromString)
override fun parseValue(value: String): T = json.decodeFromString(value)
override fun serializeAsValue(value: T): String = json.encodeToString(value)
override fun put(bundle: Bundle, key: String, value: T) {
bundle.putString(key, json.encodeToString(value))
}
}
Что происходит? здесь?
Подробнее здесь: https://stackoverflow.com/questions/791 ... e-return-t