Я использую анимационную анимацию, чтобы добавить дополнительную slideOutpuretically выходная анимация в одну красную коробку в экране 1 , онтоп по умолчанию ancit amit Происходит:
Boolean Visiblebox1 по умолчанию true и управляет визиобличностью коробки. Кнопка нажимает SETSIBLEBOX1 в false и перемещается на Screen2 . Это работает так, как предполагалось, но когда PopbackStack () выполняется слишком быстро из Screen2 , поле на Screen1 не восстановлен, оно остается невидимым:
Причина:
При навигации на Screen2 , VisibleBox1 устанавливается на false, а Screen1 Запускает анимацию выхода Navhost.
До завершения, Screen2 уже стал виден, и кнопка, запускающая кнопка PopbackStack () может быть нажат. Это сбрасывает навигацию по выходу на Screen1 , но он не сбрасывает дополнительную анимацию коробки и которая остается невидимой, с VisibleBox1 все еще установлена на false.
Вот мой код:
.
Код: Выделить всё
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
val navController = rememberNavController()
NavHost(
modifier = Modifier,
navController = navController,
startDestination = "Screen1"
) {
composable("Screen1")
{
Screen1(navController)
}
composable("Screen2")
{
Screen2(navController)
}
}
}
}
@Composable
fun Screen1(navController: NavController) {
val lifecycleOwner = LocalLifecycleOwner.current
LaunchedEffect(Unit) {
Log.i("Screen1", "Created")
}
DisposableEffect(lifecycleOwner) {
onDispose {
Log.i("Screen1", "OnDispose")
}
}
var visibleBox1 by remember { mutableStateOf(true) }
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(
modifier = Modifier
.fillMaxWidth()
.height(200.dp)
)
AnimatedVisibility(visible = visibleBox1, exit = slideOutVertically()) {
Box(
modifier = Modifier
.height(100.dp)
.fillMaxWidth()
.background(color = Color.Red)
) {
}
}
Button(onClick = {
visibleBox1 = false
Log.i("Screen1_Button", "OnClick,navigate to Screen2")
navController.navigate("Screen2")
}) {
Text("navigate to Screen2")
}
}
}
@Composable
fun Screen2(navController: NavController) {
LaunchedEffect(Unit) {
Log.i("Screen2", "Created")
}
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("I'm Screen2")
Button(onClick = {
navController.popBackStack()
Log.i("Screen2_Button", "Onclick,popBackStack()")
}) {
Text("pop back stack")
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... -animation