androidx.compose.material3.adaptive.navigation3

Classes

ListDetailSceneStrategy

A ListDetailSceneStrategy supports arranging NavEntrys into an adaptive ListDetailPaneScaffold.

Cmn
SupportingPaneSceneStrategy

A SupportingPaneSceneStrategy supports arranging NavEntrys into an adaptive SupportingPaneScaffold.

Cmn

Top-level functions summary

Top-level functions

rememberListDetailSceneStrategy

@ExperimentalMaterial3AdaptiveApi
@Composable
fun <T : Any> rememberListDetailSceneStrategy(
    backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange,
    directive: PaneScaffoldDirective = calculatePaneScaffoldDirective(currentWindowAdaptiveInfo()),
    adaptStrategies: ThreePaneScaffoldAdaptStrategies = ListDetailPaneScaffoldDefaults.adaptStrategies()
): ListDetailSceneStrategy<T>

Creates and remembers a ListDetailSceneStrategy.

import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.material3.adaptive.navigation3.ListDetailSceneStrategy import androidx.compose.material3.adaptive.navigation3.rememberListDetailSceneStrategy import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.onClick import androidx.navigation3.runtime.entryProvider import androidx.navigation3.runtime.rememberNavBackStack import androidx.navigation3.ui.NavDisplay val backStack = rememberNavBackStack(HomeKey) val sceneStrategy = rememberListDetailSceneStrategy<Any>() val items = listOf("Item 1", "Item 2", "Item 3") val extraItems = listOf("Extra 1", "Extra 2", "Extra 3") val selectedIndex =  backStack.lastOrNull()?.let {  when (it) {  is DetailKey -> it.index  is ExtraKey -> it.index  else -> null  }  } NavDisplay(  backStack = backStack,  modifier = Modifier.fillMaxSize(),  sceneStrategy = sceneStrategy,  entryProvider =  entryProvider {  entry<HomeKey> {  Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {  Button(  onClick = { if (backStack.last() != ListKey) backStack.add(ListKey) }  ) {  Text("Go to list")  }  }  }  entry<ListKey>(  metadata =  ListDetailSceneStrategy.listPane(  detailPlaceholder = {  DetailPaneContent(selectedItem = null, onShowExtra = {})  }  )  ) {  ListPaneContent(  items = items,  selectedIndex = selectedIndex,  onItemClick = { index ->  val dest = DetailKey(index)  if (backStack.last() != dest) backStack.add(dest)  },  )  }  entry<DetailKey>(metadata = ListDetailSceneStrategy.detailPane()) {  DetailPaneContent(  selectedItem = selectedIndex?.let { items[it] },  onShowExtra = {  val dest = ExtraKey(selectedIndex!!)  if (backStack.last() != dest) backStack.add(dest)  },  )  }  entry<ExtraKey>(metadata = ListDetailSceneStrategy.extraPane()) {  ExtraPaneContent(item = extraItems[selectedIndex!!])  }  }, )
Parameters
backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange

the behavior describing which backstack entries may be skipped during the back navigation. See BackNavigationBehavior.

directive: PaneScaffoldDirective = calculatePaneScaffoldDirective(currentWindowAdaptiveInfo())

The top-level directives about how the list-detail scaffold should arrange its panes.

adaptStrategies: ThreePaneScaffoldAdaptStrategies = ListDetailPaneScaffoldDefaults.adaptStrategies()

adaptation strategies of each pane, which denotes how each pane should be adapted if they can't fit on screen in the PaneAdaptedValue.Expanded state. It is recommended to use ListDetailPaneScaffoldDefaults.adaptStrategies as a default, but custom ThreePaneScaffoldAdaptStrategies are supported as well.

rememberSupportingPaneSceneStrategy

@ExperimentalMaterial3AdaptiveApi
@Composable
fun <T : Any> rememberSupportingPaneSceneStrategy(
    backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilCurrentDestinationChange,
    directive: PaneScaffoldDirective = calculatePaneScaffoldDirective(currentWindowAdaptiveInfo()),
    adaptStrategies: ThreePaneScaffoldAdaptStrategies = SupportingPaneScaffoldDefaults.adaptStrategies()
): SupportingPaneSceneStrategy<T>

Creates and remembers a SupportingPaneSceneStrategy.

Parameters
backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilCurrentDestinationChange

the behavior describing which backstack entries may be skipped during the back navigation. See BackNavigationBehavior.

directive: PaneScaffoldDirective = calculatePaneScaffoldDirective(currentWindowAdaptiveInfo())

The top-level directives about how the supporting-pane scaffold should arrange its panes.

adaptStrategies: ThreePaneScaffoldAdaptStrategies = SupportingPaneScaffoldDefaults.adaptStrategies()

adaptation strategies of each pane, which denotes how each pane should be adapted if they can't fit on screen in the PaneAdaptedValue.Expanded state. It is recommended to use SupportingPaneScaffoldDefaults.adaptStrategies as a default, but custom ThreePaneScaffoldAdaptStrategies are supported as well.