Skip to content

Commit c8e7fde

Browse files
committed
feat: refactor navigation suite scaffold implementation
- Introduce `rememberNavigationSuiteScaffoldState` to manage navigation visibility - Implement `LaunchedEffect` to show or hide the navigation suite based on the current item - Replace manual `AnimatedVisibility` and `derivedStateOf` logic with built-in scaffold state management - Set static `NavigationSuiteType.NavigationRail` as the layout type - Remove unused animation and adaptive info imports
1 parent 737a304 commit c8e7fde

1 file changed

Lines changed: 24 additions & 37 deletions

File tree

  • composeApp/src/jvmMain/kotlin/com/meet/dev/analyzer/presentation/navigation

composeApp/src/jvmMain/kotlin/com/meet/dev/analyzer/presentation/navigation/AppNavigation.kt

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
package com.meet.dev.analyzer.presentation.navigation
22

3-
import androidx.compose.animation.AnimatedVisibility
4-
import androidx.compose.animation.slideInHorizontally
5-
import androidx.compose.animation.slideOutHorizontally
6-
import androidx.compose.foundation.background
7-
import androidx.compose.material3.MaterialTheme
8-
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
9-
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldDefaults
103
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldLayout
4+
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldValue
115
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteType
6+
import androidx.compose.material3.adaptive.navigationsuite.rememberNavigationSuiteScaffoldState
127
import androidx.compose.runtime.Composable
8+
import androidx.compose.runtime.LaunchedEffect
139
import androidx.compose.runtime.derivedStateOf
1410
import androidx.compose.runtime.getValue
1511
import androidx.compose.runtime.remember
16-
import androidx.compose.ui.Modifier
1712
import androidx.navigation.compose.NavHost
1813
import androidx.navigation.compose.composable
1914
import androidx.navigation.compose.currentBackStackEntryAsState
@@ -43,39 +38,32 @@ fun AppNavigation(
4338
}
4439
}
4540
}
46-
47-
val currentWindowAdaptiveInfo = currentWindowAdaptiveInfo()
48-
val layoutType by remember(currentNavigationItem, currentWindowAdaptiveInfo) {
49-
derivedStateOf {
50-
if (currentNavigationItem != null) {
51-
NavigationSuiteScaffoldDefaults.calculateFromAdaptiveInfo(currentWindowAdaptiveInfo)
52-
} else {
53-
NavigationSuiteType.None
54-
}
41+
val navigationSuiteState = rememberNavigationSuiteScaffoldState(
42+
initialValue = NavigationSuiteScaffoldValue.Hidden
43+
)
44+
LaunchedEffect(currentNavigationItem) {
45+
if (currentNavigationItem != null) {
46+
navigationSuiteState.show()
47+
} else {
48+
navigationSuiteState.hide()
5549
}
5650
}
5751
NavigationSuiteScaffoldLayout(
52+
state = navigationSuiteState,
5853
navigationSuite = {
59-
AnimatedVisibility(
60-
visible = currentNavigationItem != null,
61-
modifier = Modifier.background(MaterialTheme.colorScheme.surface),
62-
enter = slideInHorizontally { -it },
63-
exit = slideOutHorizontally { it },
64-
) {
65-
NavigationRailLayout(
66-
currentNavigationItem = currentNavigationItem,
67-
onNavigate = {
68-
navController.navigate(it.appRoute) {
69-
launchSingleTop = true
70-
restoreState = true
71-
}
72-
},
73-
isDarkTheme = isDarkMode,
74-
onThemeChange = onThemeChange,
75-
)
76-
}
54+
NavigationRailLayout(
55+
currentNavigationItem = currentNavigationItem,
56+
onNavigate = {
57+
navController.navigate(it.appRoute) {
58+
launchSingleTop = true
59+
restoreState = true
60+
}
61+
},
62+
isDarkTheme = isDarkMode,
63+
onThemeChange = onThemeChange,
64+
)
7765
},
78-
layoutType = layoutType
66+
layoutType = NavigationSuiteType.NavigationRail
7967
) {
8068
NavHost(
8169
navController = navController,
@@ -137,7 +125,6 @@ fun AppNavigation(
137125
parentEntry = parentEntry
138126
)
139127
}
140-
141128
}
142129
}
143130
}

0 commit comments

Comments
 (0)