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())
): 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.

rememberSupportingPaneSceneStrategy

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

Creates and remembers a SupportingPaneSceneStrategy.

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 supporting-pane scaffold should arrange its panes.