我在 jetpack compose 中玩 AnimatedVisibility
并发现退出动画不起作用,因为在动画开始之前可组合被破坏(?)。我在启用延迟的情况下对其进行了测试,以查看如果销毁延迟,动画是否有效,并且它有效。但它看起来不太好而且似乎是被迫的,此外它不适用于默认的 onBackPressed。这是我的代码:
NavHost(navController = navController, startDestination = startDestination) {
composable() { // First Screen }
composable(
...
) { navBackStackEntry ->
val scope = rememberCoroutineScope()
AnimatedVisibility(
visibleState = remember { MutableTransitionState(!detailScreenIsVisible) }
.apply { targetState = detailScreenIsVisible },
enter = slideInHorizontally(
initialOffsetX = { it / 4 }
),
exit = slideOutHorizontally(
targetOffsetX = { it / 4 }
),
) {
DetailScreen(
...
onNavigateUp = {
detailScreenIsVisible = false
scope.launch {
delay(10L)
navController.navigateUp()
}
}
)
}
}
}
对此有什么解决方法?
答案 0 :(得分:2)
如果您查看 Google 文档中指向 Navigating with Compose 的链接,它会指出:
<块引用>动画块不能与导航撰写一起使用。此功能请求中正在跟踪 Navigation Compose 中的过渡动画。
因此,Google 正在研究它,但尚未可用。您可以跟踪此功能的状态 here(我会不时检查)并等待动画广泛可用。与此同时,我发现了一个由 Johann Blake 编写的非常interesting article,它实现了自己的导航框架。他还使它能够在导航屏幕之间传递任何对象,从而避免了我们在导航组件中处理的捆绑限制。