@@ -26,6 +26,9 @@ import androidx.compose.ui.platform.LocalDensity
2626import androidx.compose.ui.text.style.TextAlign
2727import androidx.compose.ui.unit.IntSize
2828import androidx.compose.ui.unit.dp
29+ import androidx.navigation3.scene.Scene
30+ import androidx.navigation3.scene.SceneDecoratorStrategy
31+ import androidx.navigation3.scene.SceneDecoratorStrategyScope
2932import org.jetbrains.kotlinconf.generated.resources.Res
3033import org.jetbrains.kotlinconf.generated.resources.award_28
3134import org.jetbrains.kotlinconf.generated.resources.award_28_fill
@@ -88,12 +91,37 @@ private val bottomNavDestinations: List<MainNavDestination<TopLevelRoute>> = lis
8891 ),
8992)
9093
94+ internal class NavigationSceneDecoratorStrategy (
95+ private val navState : NavState ,
96+ private val navigator : Navigator ,
97+ private val showGoldenKodee : Boolean ,
98+ ) : SceneDecoratorStrategy<AppRoute> {
99+ override fun SceneDecoratorStrategyScope<AppRoute>.decorateScene (scene : Scene <AppRoute >): Scene <AppRoute > {
100+ return if (navState.topLevelRoute != null ) {
101+ NavigationDecoratingScene (scene, navState, navigator, showGoldenKodee)
102+ } else {
103+ scene
104+ }
105+ }
106+ }
107+
108+ private class NavigationDecoratingScene (
109+ private val scene : Scene <AppRoute >,
110+ private val navState : NavState ,
111+ private val navigator : Navigator ,
112+ private val showGoldenKodee : Boolean ,
113+ ) : Scene<AppRoute> by scene {
114+ override val content: @Composable () -> Unit = {
115+ NavScaffold (navState, navigator, showGoldenKodee, scene)
116+ }
117+ }
118+
91119@Composable
92- internal fun NavScaffold (
120+ private fun NavScaffold (
93121 navState : NavState ,
94122 navigator : Navigator ,
95123 showGoldenKodee : Boolean ,
96- content : @Composable (() -> Unit )
124+ scene : Scene < AppRoute >,
97125) {
98126 val onSelectRoute: (TopLevelRoute ) -> Unit = { route ->
99127 navigator.activate(route)
@@ -137,7 +165,7 @@ internal fun NavScaffold(
137165
138166 Column (Modifier .weight(1f )) {
139167 Box (Modifier .weight(1f ).clipToBounds()) {
140- content()
168+ scene. content()
141169 }
142170
143171 NotificationBar ()
0 commit comments