The default scrim implementation shown with a levitated pane to block the user interaction from the underlying layout.
levitateAsDialogSample
/**
* This sample shows how to create a [ThreePaneScaffoldNavigator] that will show the extra pane as a
* modal dialog when the extra pane is the current destination. The dialog will be centered in the
* scaffold, with a scrim that clicking on it will dismiss the dialog.
*/
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Preview
@Composable
fun <T> levitateAsDialogSample(): ThreePaneScaffoldNavigator<T> {
val coroutineScope = rememberCoroutineScope()
val scaffoldDirective = calculatePaneScaffoldDirective(currentWindowAdaptiveInfoV2())
var navigator: ThreePaneScaffoldNavigator<T>? = null
val onClick: () -> Unit = { coroutineScope.launch { navigator?.navigateBack() } }
navigator =
rememberListDetailPaneScaffoldNavigator<T>(
scaffoldDirective = scaffoldDirective,
adaptStrategies =
SupportingPaneScaffoldDefaults.adaptStrategies(
extraPaneAdaptStrategy =
AdaptStrategy.Levitate(
alignment = Alignment.Center,
scrim = {
LevitatedPaneScrim(
Modifier.semantics {
contentDescription = "Scrim"
this.onClick("Dismiss the extra pane") {
onClick()
true
}
},
onClick = onClick,
)
},
)
.onlyIfSinglePane(scaffoldDirective)
),
)
return navigator
}