DialogSceneStrategy.Companion.DialogKey


public static class DialogSceneStrategy.Companion.DialogKey implements NavMetadataKey


The key for NavEntry.metadata or Scene.metadata to indicate that an entry should be displayed within a Dialog.

import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.BasicText
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.DialogProperties
import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.entryProvider
import androidx.navigation3.runtime.metadata
import androidx.navigation3.runtime.rememberNavBackStack
import androidx.navigation3.scene.DialogSceneStrategy
import androidx.navigation3.scene.DialogSceneStrategy.Companion.DialogKey
import androidx.navigation3.ui.NavDisplay

val backStack = rememberNavBackStack(OverlaidNavKey)
NavDisplay(
    backStack,
    onBack = { backStack.removeLastOrNull() },
    sceneStrategies = listOf(DialogSceneStrategy()),
    entryProvider =
        entryProvider {
            entry<OverlaidNavKey> {
                Box(
                    Modifier.fillMaxSize()
                        .background(Color(0.2f, 0.2f, 1.0f, 1.0f))
                        .border(10.dp, Color.Blue),
                    contentAlignment = Alignment.Center,
                ) {
                    Column(horizontalAlignment = Alignment.CenterHorizontally) {
                        BasicText(
                            "Overlaid Entry",
                            Modifier.size(50.dp),
                            style = TextStyle(textAlign = TextAlign.Center),
                        )
                        Button(onClick = { backStack.add(DialogNavKey) }) {
                            Text("Open Dialog")
                        }
                    }
                }
            }
            entry<DialogNavKey>(metadata = metadata { put(DialogKey, DialogProperties()) }) {
                RedBox("Dialog")
            }
        },
)

Summary

Public fields