Skip to content

Commit 36730f7

Browse files
authored
feat: adds close button to list-and-detail pane sample. (#683)
* feat: adds close button to list-and-detail pane sample.
1 parent 49323f3 commit 36730f7

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleListDetailPaneScaffold.kt

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ import androidx.compose.foundation.layout.fillMaxSize
2525
import androidx.compose.foundation.layout.padding
2626
import androidx.compose.foundation.layout.size
2727
import androidx.compose.foundation.lazy.LazyColumn
28+
import androidx.compose.material.icons.Icons
29+
import androidx.compose.material.icons.filled.Close
2830
import androidx.compose.material3.Card
31+
import androidx.compose.material3.Icon
32+
import androidx.compose.material3.IconButton
2933
import androidx.compose.material3.ListItem
3034
import androidx.compose.material3.Text
3135
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
@@ -34,13 +38,15 @@ import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
3438
import androidx.compose.material3.adaptive.layout.AnimatedPane
3539
import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold
3640
import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole
41+
import androidx.compose.material3.adaptive.layout.PaneAdaptedValue
3742
import androidx.compose.material3.adaptive.layout.PaneScaffoldDirective
3843
import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior
3944
import androidx.compose.material3.adaptive.navigation.NavigableListDetailPaneScaffold
4045
import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler
4146
import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator
4247
import androidx.compose.runtime.Composable
4348
import androidx.compose.runtime.rememberCoroutineScope
49+
import androidx.compose.ui.Alignment
4450
import androidx.compose.ui.Modifier
4551
import androidx.compose.ui.graphics.Color
4652
import 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

Comments
 (0)