From f2932e1781cc95b6dfa56c8ea0acae20578de41c Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Sat, 28 Dec 2024 13:40:02 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Fix=20Navigation=20Bar/?= =?UTF-8?q?Rail=20selected=20item?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed behavior, where going in nested screen changes selected item resulting in visual glitches --- .../core/components/navigation_bar/NavigationBar.kt | 12 +++++++++++- .../components/navigation_rail/NavigationRail.kt | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt index ce4bc434..367b5bb7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_bar/NavigationBar.kt @@ -2,6 +2,9 @@ package ua.acclorite.book_story.presentation.core.components.navigation_bar import androidx.compose.material3.NavigationBar import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.lifecycle.compose.collectAsStateWithLifecycle import ua.acclorite.book_story.domain.navigator.NavigatorItem import ua.acclorite.book_story.presentation.navigator.LocalNavigator @@ -9,7 +12,14 @@ import ua.acclorite.book_story.presentation.navigator.LocalNavigator @Composable fun NavigationBar(tabs: List) { val navigator = LocalNavigator.current - val currentTab = navigator.lastItem.collectAsStateWithLifecycle() + val lastItem = navigator.lastItem.collectAsStateWithLifecycle() + + val currentTab = remember { mutableStateOf(lastItem.value) } + LaunchedEffect(lastItem.value) { + if (tabs.any { it.screen::class == lastItem.value::class }) { + currentTab.value = lastItem.value + } + } NavigationBar { tabs.forEach { tab -> diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt index 0910b66b..5681aef7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/core/components/navigation_rail/NavigationRail.kt @@ -14,6 +14,9 @@ import androidx.compose.foundation.layout.width import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationRail import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection @@ -25,8 +28,15 @@ import ua.acclorite.book_story.presentation.navigator.LocalNavigator @Composable fun NavigationRail(tabs: List) { val navigator = LocalNavigator.current - val currentTab = navigator.lastItem.collectAsStateWithLifecycle() val layoutDirection = LocalLayoutDirection.current + val lastItem = navigator.lastItem.collectAsStateWithLifecycle() + + val currentTab = remember { mutableStateOf(lastItem.value) } + LaunchedEffect(lastItem.value) { + if (tabs.any { it.screen::class == lastItem.value::class }) { + currentTab.value = lastItem.value + } + } NavigationRail( modifier = Modifier