From 69c36fb79592c23bfe16547bdf730b8436f25317 Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Fri, 19 Jun 2026 00:15:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=85=A8=E6=96=87?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=AD=89=E7=95=8C=E9=9D=A2=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E8=BF=94=E5=9B=9E=E5=AF=BC=E8=87=B4=E9=80=80?= =?UTF-8?q?=E5=87=BA=E4=B8=8A=E7=BA=A7=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/main/MainActivity.kt | 11 ++++++++++- .../main/java/io/legado/app/ui/main/MainNavigator.kt | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 707ea2988..11f06aa9a 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -25,8 +25,10 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.snapshotFlow import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator import androidx.navigation3.runtime.NavKey import androidx.navigation3.runtime.rememberNavBackStack +import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator import androidx.navigation3.scene.SinglePaneSceneStrategy import androidx.navigation3.ui.NavDisplay import io.legado.app.BuildConfig @@ -236,12 +238,19 @@ open class MainActivity : BaseComposeActivity(), VariableDialog.Callback { LaunchedEffect(backStack) { snapshotFlow { backStack.toList() } - .collect { latestBackStack = it } + .collect { + latestBackStack = it + MainNavigator.onBackStackChanged() + } } SharedTransitionLayout { NavDisplay( backStack = backStack, + entryDecorators = listOf( + rememberSaveableStateHolderNavEntryDecorator(), + rememberViewModelStoreNavEntryDecorator(), + ), sceneStrategies = listOf(SinglePaneSceneStrategy()), transitionSpec = { (slideIntoContainer( diff --git a/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt b/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt index 641febb00..8292c959a 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt @@ -8,6 +8,8 @@ import io.legado.app.ui.rss.read.MainRouteRssRead object MainNavigator { + private var backNavigationInProgress = false + fun navigateToRoute(backStack: MutableList, route: NavKey) { val currentRoute = backStack.lastOrNull() if (currentRoute == route) return @@ -181,6 +183,10 @@ object MainNavigator { } fun navigateBack(activity: Activity, backStack: MutableList) { + if (backNavigationInProgress) { + return + } + backNavigationInProgress = true if (backStack.size > 1) { backStack.removeLastOrNull() } else { @@ -188,6 +194,10 @@ object MainNavigator { } } + fun onBackStackChanged() { + backNavigationInProgress = false + } + fun resolveStartRoute(intent: Intent?): NavKey { val route = intent?.getStringExtra(MainIntent.EXTRA_START_ROUTE) resolveRssStartRoute(route, intent)?.let { return it }