Я пытаюсь использовать аргументы навигации TypeSafe для своего приложения, но у меня проблема с сериализацией.
Я создал запечатанный интерфейс, который содержит все классы данных для всех экранов моего приложения.
Выглядит это так:
sealed interface RouteData {
val navigationVisible: Boolean
@Serializable
data class SplashScreenData(
override val navigationVisible: Boolean = false
) : RouteData
@Serializable
data class FirstScreenData(
override val navigationVisible: Boolean = true
) : RouteData
@Serializable
data class SecondScreenData(
override val navigationVisible: Boolean = false,
val id: Int,
val name: String,
) : RouteData
@Serializable
data class ThirdScreenData(
override val navigationVisible: Boolean = false,
val item: String,
) : RouteData
...
}
И теперь у меня есть NavigationBar, который слушает backStackEntry для сбора данных:
navController.currentBackStackEntryFlow.collect { backStackEntry ->
val data = try {
backStackEntry.toRoute()
} catch (e: Exception) {
Log.e("TabBar", "Error deserializing RouteData", e)
null
}
data?.let {
isTabBarVisible = it.navigationVisible
}
}
Проблема в том, что я получаю исключение десериализации:
java.lang.IllegalArgumentException: Polymorphic value has not been read for class null
Подробнее здесь: https://stackoverflow.com/questions/790 ... ialization