@@ -19,15 +19,42 @@ class DelegatingNavigator(
1919 }
2020 }
2121
22- override fun pop (result : PopResult ? ): Screen ? = childNavigator.pop(result)
22+ override fun pop (result : PopResult ? ): Screen ? {
23+ val currentScreen = childNavigator.peek()
24+ return if (currentScreen != null && MainTab .entries.any { it.screen::class == currentScreen::class }) {
25+ childNavigator.pop(result)
26+ } else {
27+ rootNavigator.pop(result)
28+ }
29+ }
2330
24- override fun peek (): Screen ? = childNavigator.peek()
31+ override fun peek (): Screen ? {
32+ val childScreen = childNavigator.peek()
33+ return if (childScreen != null && MainTab .entries.any { it.screen::class == childScreen::class }) {
34+ childScreen
35+ } else {
36+ rootNavigator.peek()
37+ }
38+ }
2539
2640 override fun resetRoot (
2741 newRoot : Screen ,
2842 saveState : Boolean ,
2943 restoreState : Boolean ,
30- ): ImmutableList <Screen > = childNavigator.resetRoot(newRoot, saveState, restoreState)
44+ ): ImmutableList <Screen > {
45+ return if (MainTab .entries.any { it.screen::class == newRoot::class }) {
46+ childNavigator.resetRoot(newRoot, saveState, restoreState)
47+ } else {
48+ rootNavigator.resetRoot(newRoot, saveState, restoreState)
49+ }
50+ }
3151
32- override fun peekBackStack (): ImmutableList <Screen > = childNavigator.peekBackStack()
52+ override fun peekBackStack (): ImmutableList <Screen > {
53+ val childScreen = childNavigator.peek()
54+ return if (childScreen != null && MainTab .entries.any { it.screen::class == childScreen::class }) {
55+ childNavigator.peekBackStack()
56+ } else {
57+ rootNavigator.peekBackStack()
58+ }
59+ }
3360}
0 commit comments