incorporate safe fallback destination to null destination UI flickering

pull/1728/head
Tram Bui 2 weeks ago
parent 1c2fe163a0
commit 827d3d66e2

@ -18,6 +18,8 @@ package com.google.samples.apps.nowinandroid.ui
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.navigation.NavController
@ -25,7 +27,6 @@ import androidx.navigation.NavDestination
import androidx.navigation.NavDestination.Companion.hasRoute
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navOptions
import androidx.tracing.trace
@ -83,9 +84,21 @@ class NiaAppState(
userNewsResourceRepository: UserNewsResourceRepository,
timeZoneMonitor: TimeZoneMonitor,
) {
private val previousDestination = mutableStateOf<NavDestination?>(null)
val currentDestination: NavDestination?
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination
@Composable get() {
// Collect the currentBackStackEntryFlow as a state
val currentEntry = navController.currentBackStackEntryFlow
.collectAsState(initial = null)
// Fallback to previousDestination if currentEntry is null
return currentEntry.value?.destination.also { destination ->
if (destination != null) {
previousDestination.value = destination
}
} ?: previousDestination.value
}
val currentTopLevelDestination: TopLevelDestination?
@Composable get() {

@ -17,7 +17,7 @@ androidxHiltNavigationCompose = "1.2.0"
androidxLifecycle = "2.8.6"
androidxMacroBenchmark = "1.3.0"
androidxMetrics = "1.0.0-beta01"
androidxNavigation = "2.8.0"
androidxNavigation = "2.8.4"
androidxProfileinstaller = "1.3.1"
androidxTestCore = "1.6.1"
androidxTestExt = "1.2.1"

Loading…
Cancel
Save