Jetpack создает всплывающее окно навигации, включая истинный, не очищенный составной экран из backstack
Я использую версию интерфейса Jetpack Compose
1.3.0-beta08
и навигация составить версию
2.4.0-alpha02
и работающее приложение Bloom со всеми новыми компонентами архитектуры. После успешного входа в систему мне нужно очистить все предыдущие экраны входа в систему, но даже добавил
popUpTo("HomeScreen"){inclusive = true}
, мой экран входа в систему удален из backstack, но экран приветствия входа в систему не удален из backstack, когда я возвращаюсь с главного экрана. я что-то упускаю / ошибаюсь при создании навигации?
composable(Screen.LoginScreen.route) {
LoginScreen {
Log.d("AppMainNavigation", "AppMainNavigation: ${navController.backQueue}")
navController.navigate(Screen.HomeBaseScreen.route){
popUpTo(Screen.LoginScreen.route){
inclusive = true
}
launchSingleTop = true
}
}
}
Ссылка на GitHub:https://github.com/rramprasad/BloomApp/blob/main/app/src/main/java/dev/ramprasad/bloom/MainActivity.kt
2 ответа
обновите свою версию Jetpack Compose до последней версии предварительного просмотра и всех других зависимостей. текущая версия реактивного ранца: 1.0.0-rc02
а также какой экран вы хотите открыть, просто используйте это
мой код заставки:
@Composable
fun Navigate (navController: NavController) {
ProduceState (initialValue = -1) {
delay(1500) navController.popBackStack() val route = if (Firebase.auth.currentUser == null) AppRouter.Intro.route else AppRouter.Home.route navController.navigate(route)
}
}
поэтому здесь вы можете использовать эту строку ниже, чтобы удалить экран из backstack
navController.popBackStack()
Надеюсь, это решит ошибки
Используйте маршрут в качестве параметра в функции. Он очищает все записи backstack до этого, и еслиinclusive = true
затемWelcomeScreen
слишком.
navController.navigate(Screen.HomeBaseScreen.route) {
popUpTo(Screen.WelcomeScreen.route) { inclusive = true }
}
Кроме того, если вы используете параметры в маршруте, вы должны использовать их вpopUpTo
также.
navController.navigate(Screen.HomeBaseScreen.route) {
popUpTo(Screen.WelcomeScreen.route + "/{someId}") { inclusive = true }
}