A three pane layout that follows the Material guidelines, displaying the provided panes in a canonical supporting pane layout.
PaneExpansionDragHandleSample
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Preview
@Composable
fun ThreePaneScaffoldScope.PaneExpansionDragHandleSample(
state: PaneExpansionState = rememberPaneExpansionState()
) {
val interactionSource = remember { MutableInteractionSource() }
VerticalDragHandle(
modifier =
Modifier.paneExpansionDraggable(
state,
LocalMinimumInteractiveComponentSize.current,
interactionSource,
),
interactionSource = interactionSource,
)
}
SupportingPaneScaffoldSample
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Preview
@Composable
fun SupportingPaneScaffoldSample() {
val coroutineScope = rememberCoroutineScope()
val scaffoldNavigator = rememberSupportingPaneScaffoldNavigator<NavItemData>()
val extraItems = listOf("Extra content")
val selectedItem = NavItemData(index = 0, showExtra = true)
SupportingPaneScaffold(
directive = scaffoldNavigator.scaffoldDirective,
scaffoldState = scaffoldNavigator.scaffoldState,
mainPane = {
AnimatedPane {
MainPaneContent(
scaffoldNavigator = scaffoldNavigator,
hasExtraPane = true,
coroutineScope = coroutineScope,
)
}
},
supportingPane = {
AnimatedPane(modifier = Modifier.preferredWidth(200.dp)) { SupportingPaneContent() }
},
extraPane = {
AnimatedPane {
ExtraPaneContent(
extraItems = extraItems,
selectedItem = selectedItem,
scaffoldNavigator = scaffoldNavigator,
coroutineScope = coroutineScope,
)
}
},
paneExpansionState =
rememberPaneExpansionState(
keyProvider = scaffoldNavigator.scaffoldValue,
anchors = PaneExpansionAnchors,
),
paneExpansionDragHandle = { state -> PaneExpansionDragHandleSample(state) },
)
}