Skip to content

Commit 70bc60a

Browse files
author
code3-dev
committed
Fix navigation refresh issues: Preserve screen state and ViewModel data across navigation
1 parent 9770d65 commit 70bc60a

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

.kotlin/sessions/kotlin-compiler-11380051393043603248.salive

Whitespace-only changes.

app/src/main/java/com/pira/ccloud/navigation/AppNavigation.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.pira.ccloud.navigation
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.remember
5+
import androidx.lifecycle.viewmodel.compose.viewModel
46
import androidx.navigation.NavHostController
57
import androidx.navigation.compose.NavHost
68
import androidx.navigation.compose.composable
@@ -14,6 +16,9 @@ import com.pira.ccloud.screens.SingleMovieScreen
1416
import com.pira.ccloud.screens.SingleSeriesScreen
1517
import com.pira.ccloud.screens.SplashScreen
1618
import com.pira.ccloud.screens.FavoritesScreen
19+
import com.pira.ccloud.ui.movies.MoviesViewModel
20+
import com.pira.ccloud.ui.search.SearchViewModel
21+
import com.pira.ccloud.ui.series.SeriesViewModel
1722
import com.pira.ccloud.ui.theme.ThemeSettings
1823
import com.pira.ccloud.ui.theme.ThemeManager
1924
import androidx.compose.ui.platform.LocalContext
@@ -27,6 +32,11 @@ fun AppNavigation(
2732
val themeManager = ThemeManager(context)
2833
val themeSettings = themeManager.loadThemeSettings()
2934

35+
// Create ViewModels here to preserve their state across navigation
36+
val moviesViewModel = viewModel<MoviesViewModel>()
37+
val seriesViewModel = viewModel<SeriesViewModel>()
38+
val searchViewModel = viewModel<SearchViewModel>()
39+
3040
NavHost(
3141
navController = navController,
3242
startDestination = AppScreens.Splash.route
@@ -49,13 +59,13 @@ fun AppNavigation(
4959
}
5060

5161
composable(route = AppScreens.Movies.route) {
52-
MoviesScreen(navController = navController)
62+
MoviesScreen(viewModel = moviesViewModel, navController = navController)
5363
}
5464
composable(route = AppScreens.Series.route) {
55-
SeriesScreen(navController = navController)
65+
SeriesScreen(viewModel = seriesViewModel, navController = navController)
5666
}
5767
composable(route = AppScreens.Search.route) {
58-
SearchScreen(navController = navController)
68+
SearchScreen(viewModel = searchViewModel, navController = navController)
5969
}
6070
composable(route = AppScreens.Settings.route) {
6171
SettingsScreen(onThemeSettingsChanged, navController)

app/src/main/java/com/pira/ccloud/navigation/BottomNavigation.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import androidx.compose.ui.text.font.FontWeight
2929
import androidx.compose.ui.unit.dp
3030
import androidx.navigation.NavController
3131
import androidx.navigation.compose.currentBackStackEntryAsState
32+
import androidx.navigation.NavGraph.Companion.findStartDestination
3233

3334
@Composable
3435
fun BottomNavigationBar(navController: NavController) {
@@ -110,6 +111,10 @@ fun BottomNavigationBar(navController: NavController) {
110111
launchSingleTop = true
111112
// Restore state when reselecting a previously selected item
112113
restoreState = true
114+
// Pop up to the current destination to avoid building up a large stack
115+
popUpTo(navController.graph.findStartDestination().id) {
116+
saveState = true
117+
}
113118
}
114119
}
115120
},

app/src/main/java/com/pira/ccloud/navigation/SidebarNavigation.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import androidx.compose.ui.text.font.FontWeight
3232
import androidx.compose.ui.unit.dp
3333
import androidx.navigation.NavController
3434
import androidx.navigation.compose.currentBackStackEntryAsState
35+
import androidx.navigation.NavGraph.Companion.findStartDestination
3536

3637
@Composable
3738
fun SidebarNavigation(navController: NavController) {
@@ -129,6 +130,10 @@ fun SidebarNavigation(navController: NavController) {
129130
launchSingleTop = true
130131
// Restore state when reselecting a previously selected item
131132
restoreState = true
133+
// Pop up to the current destination to avoid building up a large stack
134+
popUpTo(navController.graph.findStartDestination().id) {
135+
saveState = true
136+
}
132137
}
133138
}
134139
},

0 commit comments

Comments
 (0)