androidx.navigation3.scene


Interfaces

OverlayScene

A specific scene to render 1 or more NavEntry instances as an overlay.

Cmn
Scene

A specific scene to render 1 or more androidx.navigation3.runtime.NavEntrys.

Cmn
SceneStrategy

A strategy that tries to calculate a Scene given a list of NavEntry.

Cmn

Classes

DialogSceneStrategy

A SceneStrategy that displays entries that have added dialog to their NavEntry.metadata within a Dialog instance.

Cmn
SceneInfo

Represents a snapshot of the visible destinations in a navigation container.

Cmn
SceneState

Class for holding the state associated with a scene

Cmn
SceneStrategyScope

Scope used to create a Scene from a list of NavEntrys.

Cmn
SinglePaneSceneStrategy

A SceneStrategy that always creates a 1-entry Scene simply displaying the last entry in the list.

Cmn

Top-level functions summary

SceneState<T>
@Composable
<T : Any> rememberSceneState(
    entries: List<NavEntry<T>>,
    sceneStrategy: SceneStrategy<T>,
    onBack: () -> Unit
)

Returns a SceneState that is remembered across compositions based on the parameters.

Cmn

Top-level functions

rememberSceneState

@Composable
fun <T : Any> rememberSceneState(
    entries: List<NavEntry<T>>,
    sceneStrategy: SceneStrategy<T>,
    onBack: () -> Unit
): SceneState<T>

Returns a SceneState that is remembered across compositions based on the parameters.

This calculates all of the scenes and provides them in a SceneState.

import androidx.compose.material3.Text
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.navigation3.runtime.NavEntry
import androidx.navigation3.runtime.rememberDecoratedNavEntries
import androidx.navigation3.scene.SceneInfo
import androidx.navigation3.scene.SinglePaneSceneStrategy
import androidx.navigation3.scene.rememberSceneState
import androidx.navigation3.ui.NavDisplay
import androidx.navigationevent.compose.NavigationBackHandler
import androidx.navigationevent.compose.rememberNavigationEventState

val backStack = rememberSaveable { mutableStateListOf("a", "b") }
val entries =
    rememberDecoratedNavEntries(backStack) { key -> NavEntry(key) { Text("Key = $key") } }
val sceneState =
    rememberSceneState(
        entries,
        SinglePaneSceneStrategy(),
        onBack = { backStack.removeLastOrNull() },
    )
val currentScene = sceneState.currentScene
val navigationEventState =
    rememberNavigationEventState(
        currentInfo = SceneInfo(currentScene),
        backInfo = sceneState.previousScenes.map { SceneInfo(it) },
    )
NavigationBackHandler(
    navigationEventState,
    isBackEnabled = currentScene.previousEntries.isNotEmpty(),
    onBackCompleted = {
        // Remove entries from the back stack until we've removed all popped entries
        repeat(entries.size - currentScene.previousEntries.size) {
            backStack.removeLastOrNull()
        }
    },
)
NavDisplay(sceneState, navigationEventState)
Parameters
entries: List<NavEntry<T>>

all of the entries that are associated with this state

sceneStrategy: SceneStrategy<T>

the SceneStrategy to determine which scene to render a list of entries.

onBack: () -> Unit

a callback for handling system back press.