# SceneStrategy

Artifact: [androidx.navigation3:navigation3-ui](https://developer.android.com/jetpack/androidx/releases/navigation3) [View Source](https://cs.android.com/search?q=file:androidx/navigation3/scene/SceneStrategy.kt+class:androidx.navigation3.scene.SceneStrategy) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.0.0) Common/All
- Cmn

  ```
  fun interface SceneStrategy<T : Any>
  ```
Known direct subclasses [DialogSceneStrategy](https://developer.android.com/reference/kotlin/androidx/navigation3/scene/DialogSceneStrategy), [ListDetailSceneStrategy](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation3/ListDetailSceneStrategy), [SinglePaneSceneStrategy](https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SinglePaneSceneStrategy), [SupportingPaneSceneStrategy](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation3/SupportingPaneSceneStrategy), [SwipeDismissableSceneStrategy](https://developer.android.com/reference/kotlin/androidx/wear/compose/navigation3/SwipeDismissableSceneStrategy)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/DialogSceneStrategy` | A `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` that displays entries that have added `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/DialogSceneStrategy#dialog(androidx.compose.ui.window.DialogProperties)` to their `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavEntry#metadata()` within a `https://developer.android.com/reference/kotlin/androidx/compose/ui/window/Dialog.composable#Dialog(kotlin.Function0,androidx.compose.ui.window.DialogProperties,kotlin.Function0)` instance. |
| `https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation3/ListDetailSceneStrategy` | A `https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation3/ListDetailSceneStrategy` supports arranging `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavEntry`s into an adaptive `https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ListDetailPaneScaffold.composable#ListDetailPaneScaffold(androidx.compose.material3.adaptive.layout.PaneScaffoldDirective,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldValue,kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function2,androidx.compose.material3.adaptive.layout.PaneExpansionState)`. |
| `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SinglePaneSceneStrategy` | A `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` that always creates a 1-entry `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/Scene` simply displaying the last entry in the list. |
| `https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation3/SupportingPaneSceneStrategy` | A `https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation3/SupportingPaneSceneStrategy` supports arranging `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavEntry`s into an adaptive `https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/SupportingPaneScaffold.composable#SupportingPaneScaffold(androidx.compose.material3.adaptive.layout.PaneScaffoldDirective,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldValue,kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function2,androidx.compose.material3.adaptive.layout.PaneExpansionState)`. |
| `https://developer.android.com/reference/kotlin/androidx/wear/compose/navigation3/SwipeDismissableSceneStrategy` | A `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` that displays entries within a Wear Material component. |

*** ** * ** ***

A strategy that tries to calculate a `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/Scene` given a list of `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavEntry`s.

## Summary

| ### Public functions |
|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/Scene<T>?` | `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategyScope<T>.https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy#(androidx.navigation3.scene.SceneStrategyScope).calculateScene(kotlin.collections.List)(entries: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavEntry<T>>)` Given a `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategyScope`, calculate whether this `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` should take on the task of rendering one or more of the entries in the scope. | Cmn |
| `open infix https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy<T>` | `[then](https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy#then(androidx.navigation3.scene.SceneStrategy))(sceneStrategy: https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy<T>)` **This function is deprecated.** Deprecated in favor of List\<SceneStrategy\> APIs that take the output of this operator has been refactored to take a list of strategies instead. | Cmn |

## Public functions

### SceneStrategyScope.calculateScene

Cmn Artifact: [androidx.navigation3:navigation3-ui](https://developer.android.com/jetpack/androidx/releases/navigation3) [View Source](https://cs.android.com/search?q=file:androidx/navigation3/scene/SceneStrategy.kt+function:calculateScene) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.0.0)

```
fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>?
```

Given a `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategyScope`, calculate whether this `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` should take on the task of rendering one or more of the entries in the scope.

By returning a non-null `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/Scene`, your `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/Scene` takes on the responsibility of rendering the set of entries you declare in `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/Scene#entries()`. If you return `null`, the next available `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` will be called.

| Parameters |
|---|---|
| `entries: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavEntry<T>>` | The entries on the back stack that should be considered valid to render via a returned Scene. |

### then

Cmn Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.0.0) Deprecated in [1.1.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.1.0)

```
open infix fun [then](https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy#then(androidx.navigation3.scene.SceneStrategy))(sceneStrategy: SceneStrategy<T>): SceneStrategy<T>
```

> [!CAUTION]
> **This function is deprecated.**   
> Deprecated in favor of List\<SceneStrategy\> APIs that take the output of this operator has been refactored to take a list of strategies instead.

Chains this `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy` with another `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy#then(androidx.navigation3.scene.SceneStrategy)` to return a combined `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy`. For the returned `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy`, `https://developer.android.com/reference/kotlin/androidx/navigation3/scene/SceneStrategy#(androidx.navigation3.scene.SceneStrategyScope).calculateScene(kotlin.collections.List)` will use the first non-null result from the calculation.