Jetpack Compose Navigation — добавление пользовательского NavType приводит к немедленному возврату в startDestination.Android

Форум для тех, кто программирует под Android
Anonymous
Jetpack Compose Navigation — добавление пользовательского NavType приводит к немедленному возврату в startDestination.

Сообщение Anonymous »

У меня возникла странная проблема при использовании Jetpack Navigation for Compose при использовании пользовательского NavType. Библиотека обновлена ​​до версии 2.8.4, мой код основан на этом руководстве:
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))
}
}
Все работает, когда я перехожу к ChildB, но когда я пытаюсь перейти к ChildA, он немедленно возвращается в Home, что подтверждается добавлением navController.addOnDestinationChangedListener с инструкциями журнала. Я установил точки останова в классе NavController, и методы NavigationUp() и popBackStack() не вызываются.
Что здесь происходит?

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-return-t

Вернуться в «Android»