Метод 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