@@ -25,7 +25,11 @@ import androidx.compose.foundation.layout.fillMaxSize
2525import androidx.compose.foundation.layout.padding
2626import androidx.compose.foundation.layout.size
2727import androidx.compose.foundation.lazy.LazyColumn
28+ import androidx.compose.material.icons.Icons
29+ import androidx.compose.material.icons.filled.Close
2830import androidx.compose.material3.Card
31+ import androidx.compose.material3.Icon
32+ import androidx.compose.material3.IconButton
2933import androidx.compose.material3.ListItem
3034import androidx.compose.material3.Text
3135import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
@@ -34,13 +38,15 @@ import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
3438import androidx.compose.material3.adaptive.layout.AnimatedPane
3539import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold
3640import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole
41+ import androidx.compose.material3.adaptive.layout.PaneAdaptedValue
3742import androidx.compose.material3.adaptive.layout.PaneScaffoldDirective
3843import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior
3944import androidx.compose.material3.adaptive.navigation.NavigableListDetailPaneScaffold
4045import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler
4146import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator
4247import androidx.compose.runtime.Composable
4348import androidx.compose.runtime.rememberCoroutineScope
49+ import androidx.compose.ui.Alignment
4450import androidx.compose.ui.Modifier
4551import androidx.compose.ui.graphics.Color
4652import androidx.compose.ui.tooling.preview.Preview
@@ -118,6 +124,7 @@ fun SampleNavigableListDetailPaneScaffoldFull() {
118124 // [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_full]
119125 val scaffoldNavigator = rememberListDetailPaneScaffoldNavigator<MyItem >()
120126 val scope = rememberCoroutineScope()
127+ val backNavigationBehavior = BackNavigationBehavior .PopUntilScaffoldValueChange
121128
122129 NavigableListDetailPaneScaffold (
123130 navigator = scaffoldNavigator,
@@ -140,7 +147,25 @@ fun SampleNavigableListDetailPaneScaffoldFull() {
140147 AnimatedPane {
141148 // Show the detail pane content if selected item is available
142149 scaffoldNavigator.currentDestination?.contentKey?.let {
143- MyDetails (it)
150+ Column {
151+ // Allow users to dismiss the detail pane. Use back navigation to
152+ // hide an expanded detail pane.
153+ if (scaffoldNavigator.scaffoldValue[ListDetailPaneScaffoldRole .Detail ] == PaneAdaptedValue .Expanded ) {
154+ // Material design principles promote the usage of a right-aligned
155+ // close (X) button.
156+ IconButton (
157+ modifier = Modifier .align(Alignment .End ).padding(16 .dp),
158+ onClick = {
159+ scope.launch {
160+ scaffoldNavigator.navigateBack(backNavigationBehavior)
161+ }
162+ }
163+ ) {
164+ Icon (Icons .Default .Close , contentDescription = " Close" )
165+ }
166+ }
167+ MyDetails (it)
168+ }
144169 }
145170 }
146171 },
@@ -155,6 +180,7 @@ fun SampleListDetailPaneScaffoldWithPredictiveBackFull() {
155180 val scaffoldNavigator = rememberListDetailPaneScaffoldNavigator<MyItem >()
156181 val customScaffoldDirective = customPaneScaffoldDirective(currentWindowAdaptiveInfo())
157182 val scope = rememberCoroutineScope()
183+ val backNavigationBehavior = BackNavigationBehavior .PopUntilScaffoldValueChange
158184
159185 ThreePaneScaffoldPredictiveBackHandler (
160186 navigator = scaffoldNavigator,
@@ -183,7 +209,25 @@ fun SampleListDetailPaneScaffoldWithPredictiveBackFull() {
183209 AnimatedPane {
184210 // Show the detail pane content if selected item is available
185211 scaffoldNavigator.currentDestination?.contentKey?.let {
186- MyDetails (it)
212+ Column {
213+ // Allow users to dismiss the detail pane. Use back navigation to
214+ // hide an expanded detail pane.
215+ if (scaffoldNavigator.scaffoldValue[ListDetailPaneScaffoldRole .Detail ] == PaneAdaptedValue .Expanded ) {
216+ // Material design principles promote the usage of a right-aligned
217+ // close (X) button.
218+ IconButton (
219+ modifier = Modifier .align(Alignment .End ).padding(16 .dp),
220+ onClick = {
221+ scope.launch {
222+ scaffoldNavigator.navigateBack(backNavigationBehavior)
223+ }
224+ }
225+ ) {
226+ Icon (Icons .Default .Close , contentDescription = " Close" )
227+ }
228+ }
229+ MyDetails (it)
230+ }
187231 }
188232 }
189233 },
0 commit comments