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 }
}