Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
254 of 502 menu
◀ ▶

Метод popUpTo

Метод popUpTo класса NavOptionsBuilder вызывают внутри лямбды navigate. Он убирает destination со стопки до указанного route. Во вложенной лямбде задают inclusive и saveState, чтобы включить сам маршрут в срез и сохранить state экранов.

Синтаксис

popUpTo("home") { inclusive = false }

Параметры

Параметр Описание
route Маршрут, до которого очищают стопку перед новым destination.
inclusive Если true, удаляют и destination с этим route. Если false, он остаётся под новым экраном.
saveState Если true, state снятых экранов сохраняют для restoreState.

Пример

Давайте оставим home под details без inclusive:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home", ) { composable("home") { Button(onClick = { navController.navigate("details") { popUpTo("home") { inclusive = false } } }) { Text(text = "abcde") } } composable("details") { Text(text = "12345") } } } } }

На details popBackStack вернёт home, потому что он остался в стопке под details.

Пример

Давайте включим inclusive и saveState:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home", ) { composable("home") { Button(onClick = { navController.navigate("details") { popUpTo("home") { inclusive = true saveState = true } } }) { Text(text = "abcde") } } composable("details") { Text(text = "12345") } } } } }

После перехода в стопке останется один экран details с текстом "12345".

Смотрите также

  • класс NavOptionsBuilder,
    приёмник лямбды у navigate
  • метод navigate,
    где вызывают popUpTo
  • метод clearBackStack,
    который чистит стопку без navigate
  • метод popBackStack,
    которым возвращаются после popUpTo
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить