Метод dialog
Метод dialog класса
NavGraphBuilder
работает как
composable,
но destination рисуется диалогом
поверх текущего экрана. Маршрут задают
в route, содержимое - в лямбде
с composable UI.
Синтаксис
dialog("details") {
Text("12345")
}
Параметры
| Параметр | Описание |
|---|---|
route |
Строковый идентификатор диалогового маршрута для navigate. |
arguments |
Список аргументов маршрута, если в route есть параметры в фигурных скобках. |
content |
Лямбда с UI диалога. Может принимать NavBackStackEntry. |
Пример
Давайте откроем dialog-маршрут details поверх home:
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.dialog
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") }) {
Text(text = "abcde")
}
}
dialog("details") {
Text(text = "12345")
}
}
}
}
}
На экране home останется кнопка "abcde",
а поверх появится диалог с текстом "12345".
Пример
Давайте закроем диалог через popBackStack:
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.dialog
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") }) {
Text(text = "abcde")
}
}
dialog("details") {
Button(onClick = { navController.popBackStack() }) {
Text(text = "12345")
}
}
}
}
}
}
После нажатия в диалоге останется только
экран home с кнопкой "abcde".
Смотрите также
-
метод
composable,
который открывает полноэкранный маршрут -
метод
popBackStack,
которым закрывают диалоговый маршрут -
функция
AlertDialog,
если диалог нужен без отдельного маршрута -
метод
navigate,
которым показывают dialog-маршрут