Skip to content

Commit 57ebb93

Browse files
authored
Updated ListDetailPaneScaffold use to alpha12 (#255)
This eliminates storing state outside and directly uses the navigator as the source of truth. This also gets rid of the Modifier for AnimatedPane as it's no longer a required argument.
1 parent 568344b commit 57ebb93

File tree

4 files changed

+24
-46
lines changed

4 files changed

+24
-46
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ plugins {
77
alias(libs.plugins.kotlin.android) apply false
88
alias(libs.plugins.kapt) apply false
99
alias(libs.plugins.hilt) apply false
10+
alias(libs.plugins.kotlin.parcelize) apply false
1011
}
1112

1213
apply("${project.rootDir}/buildscripts/toml-updater-config.gradle")

compose/snippets/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ plugins {
1919
alias(libs.plugins.kotlin.android)
2020
alias(libs.plugins.kapt)
2121
alias(libs.plugins.hilt)
22+
alias(libs.plugins.kotlin.parcelize)
2223
}
2324

2425
android {

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

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.example.compose.snippets.adaptivelayouts
1818

19+
import android.os.Parcelable
1920
import androidx.activity.compose.BackHandler
2021
import androidx.compose.foundation.background
2122
import androidx.compose.foundation.clickable
@@ -35,33 +36,25 @@ import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole
3536
import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator
3637
import androidx.compose.runtime.Composable
3738
import androidx.compose.runtime.getValue
38-
import androidx.compose.runtime.mutableStateOf
39-
import androidx.compose.runtime.saveable.Saver
40-
import androidx.compose.runtime.saveable.rememberSaveable
4139
import androidx.compose.runtime.setValue
4240
import androidx.compose.ui.Modifier
4341
import androidx.compose.ui.graphics.Color
4442
import androidx.compose.ui.tooling.preview.Preview
4543
import androidx.compose.ui.unit.dp
4644
import androidx.compose.ui.unit.sp
45+
import kotlinx.parcelize.Parcelize
4746

4847
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
4948
@Composable
5049
fun SampleListDetailPaneScaffoldParts() {
5150
// [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_part02]
52-
val navigator = rememberListDetailPaneScaffoldNavigator<Nothing>()
51+
val navigator = rememberListDetailPaneScaffoldNavigator<MyItem>()
5352

5453
BackHandler(navigator.canNavigateBack()) {
5554
navigator.navigateBack()
5655
}
5756
// [END android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_part02]
5857

59-
// [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_part01]
60-
var selectedItem: MyItem? by rememberSaveable(stateSaver = MyItem.Saver) {
61-
mutableStateOf(null)
62-
}
63-
// [END android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_part01]
64-
6558
// [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_part03]
6659
ListDetailPaneScaffold(
6760
directive = navigator.scaffoldDirective,
@@ -78,13 +71,11 @@ fun SampleListDetailPaneScaffoldParts() {
7871
directive = navigator.scaffoldDirective,
7972
value = navigator.scaffoldValue,
8073
listPane = {
81-
AnimatedPane(Modifier) {
74+
AnimatedPane {
8275
MyList(
83-
onItemClick = { id ->
84-
// Set current item
85-
selectedItem = id
86-
// Switch focus to detail pane
87-
navigator.navigateTo(ListDetailPaneScaffoldRole.Detail)
76+
onItemClick = { item ->
77+
// Navigate to the detail pane with the passed item
78+
navigator.navigateTo(ListDetailPaneScaffoldRole.Detail, item)
8879
}
8980
)
9081
}
@@ -104,9 +95,9 @@ fun SampleListDetailPaneScaffoldParts() {
10495
{},
10596
// [END_EXCLUDE]
10697
detailPane = {
107-
AnimatedPane(Modifier) {
108-
selectedItem?.let { item ->
109-
MyDetails(item)
98+
AnimatedPane {
99+
navigator.currentDestination?.content?.let {
100+
MyDetails(it)
110101
}
111102
}
112103
},
@@ -119,13 +110,7 @@ fun SampleListDetailPaneScaffoldParts() {
119110
@Composable
120111
fun SampleListDetailPaneScaffoldFull() {
121112
// [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_full]
122-
// Currently selected item
123-
var selectedItem: MyItem? by rememberSaveable(stateSaver = MyItem.Saver) {
124-
mutableStateOf(null)
125-
}
126-
127-
// Create the ListDetailPaneScaffoldState
128-
val navigator = rememberListDetailPaneScaffoldNavigator<Nothing>()
113+
val navigator = rememberListDetailPaneScaffoldNavigator<MyItem>()
129114

130115
BackHandler(navigator.canNavigateBack()) {
131116
navigator.navigateBack()
@@ -135,22 +120,20 @@ fun SampleListDetailPaneScaffoldFull() {
135120
directive = navigator.scaffoldDirective,
136121
value = navigator.scaffoldValue,
137122
listPane = {
138-
AnimatedPane(Modifier) {
123+
AnimatedPane {
139124
MyList(
140-
onItemClick = { id ->
141-
// Set current item
142-
selectedItem = id
143-
// Display the detail pane
144-
navigator.navigateTo(ListDetailPaneScaffoldRole.Detail)
125+
onItemClick = { item ->
126+
// Navigate to the detail pane with the passed item
127+
navigator.navigateTo(ListDetailPaneScaffoldRole.Detail, item)
145128
},
146129
)
147130
}
148131
},
149132
detailPane = {
150-
AnimatedPane(Modifier) {
133+
AnimatedPane {
151134
// Show the detail pane content if selected item is available
152-
selectedItem?.let { item ->
153-
MyDetails(item)
135+
navigator.currentDestination?.content?.let {
136+
MyDetails(it)
154137
}
155138
}
156139
},
@@ -206,19 +189,11 @@ fun MyDetails(item: MyItem) {
206189
}
207190

208191
// [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_myitem]
209-
class MyItem(val id: Int) {
210-
companion object {
211-
val Saver: Saver<MyItem?, Int> = Saver(
212-
{ it?.id },
213-
::MyItem,
214-
)
215-
}
216-
}
192+
@Parcelize
193+
class MyItem(val id: Int) : Parcelable
217194
// [END android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_myitem]
218195

219196
val shortStrings = listOf(
220-
"Android",
221-
"Petit four",
222197
"Cupcake",
223198
"Donut",
224199
"Eclair",

gradle/libs.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ kotlin = "1.9.20"
3333
ksp = "1.8.0-1.0.9"
3434
maps-compose = "4.3.2"
3535
material = "1.11.0"
36-
material3-adaptive = "1.0.0-alpha08"
36+
material3-adaptive = "1.0.0-alpha12"
3737
material3-adaptive-navigation-suite = "1.0.0-alpha05"
3838
media3 = "1.2.1"
3939
# @keep
@@ -118,3 +118,4 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
118118
kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
119119
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
120120
version-catalog-update = { id = "nl.littlerobots.version-catalog-update", version.ref = "version-catalog-update" }
121+
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }

0 commit comments

Comments
 (0)