SceneStrategyScope



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

This Scope should be provided to the SceneStrategy.calculateScene function to create Scenes.

Summary

Public constructors

<T : Any> SceneStrategyScope(onBack: () -> Unit)
Cmn

Public properties

() -> Unit

A callback that should be connected to any internal handling of system back done by the returned Scene.

Cmn

Public constructors

SceneStrategyScope

<T : Any> SceneStrategyScope(onBack: () -> Unit = {})

Public properties

onBack

val onBack: () -> Unit

A callback that should be connected to any internal handling of system back done by the returned Scene.

For example, if your Scene uses a separate window that handles system back itself or if the UI present in your Scene allows users to go back via a custom gesture or affordance, this callback allows you to bubble up that event to the SceneState / androidx.navigation3.ui.NavDisplay that interfaces with the developer owned back stack.

import androidx.compose.runtime.Composable import androidx.compose.ui.window.Dialog import androidx.navigation3.runtime.NavEntry import androidx.navigation3.scene.OverlayScene import androidx.navigation3.scene.Scene import androidx.navigation3.scene.SceneStrategy import androidx.navigation3.scene.SceneStrategyScope /** Class that shows a [NavEntry] as a [Dialog]. */ class SimpleDialogScene<T : Any>(  private val entry: NavEntry<T>,  override val previousEntries: List<NavEntry<T>>,  onBack: () -> Unit, ) : OverlayScene<T> {  override val key = entry.contentKey  override val entries = listOf(entry)  override val overlaidEntries = previousEntries  override val content: @Composable () -> Unit = {  Dialog(onDismissRequest = onBack) { entry.Content() }  } } /**  * A [SceneStrategy] that shows every screen above the first one as a dialog.  *  * In a real example, you'd have developers opt into displaying their entry as a dialog by  * providing a companion method that provides [NavEntry.metadata].  *  * @see androidx.navigation3.scene.DialogSceneStrategy  */ class SimpleDialogSceneStrategy<T : Any> : SceneStrategy<T> {  override fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>? {  val entry = entries.lastOrNull() ?: return null  val previousEntries = entries.dropLast(1)  // Only show this as a dialog if there is something 'underneath' the dialog  return if (previousEntries.isNotEmpty()) {  SimpleDialogScene(entry, previousEntries, onBack)  } else {  null  }  } }