🛠️ Fix Navigation Bar/Rail selected item
* Fixed behavior, where going in nested screen changes selected item resulting in visual glitches
This commit is contained in:
parent
fad7292b34
commit
f2932e1781
2 changed files with 22 additions and 2 deletions
|
|
@ -2,6 +2,9 @@ package ua.acclorite.book_story.presentation.core.components.navigation_bar
|
||||||
|
|
||||||
import androidx.compose.material3.NavigationBar
|
import androidx.compose.material3.NavigationBar
|
||||||
import androidx.compose.runtime.Composable
|
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 androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import ua.acclorite.book_story.domain.navigator.NavigatorItem
|
import ua.acclorite.book_story.domain.navigator.NavigatorItem
|
||||||
import ua.acclorite.book_story.presentation.navigator.LocalNavigator
|
import ua.acclorite.book_story.presentation.navigator.LocalNavigator
|
||||||
|
|
@ -9,7 +12,14 @@ import ua.acclorite.book_story.presentation.navigator.LocalNavigator
|
||||||
@Composable
|
@Composable
|
||||||
fun NavigationBar(tabs: List<NavigatorItem>) {
|
fun NavigationBar(tabs: List<NavigatorItem>) {
|
||||||
val navigator = LocalNavigator.current
|
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 {
|
NavigationBar {
|
||||||
tabs.forEach { tab ->
|
tabs.forEach { tab ->
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@ import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.NavigationRail
|
import androidx.compose.material3.NavigationRail
|
||||||
import androidx.compose.runtime.Composable
|
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.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||||
|
|
@ -25,8 +28,15 @@ import ua.acclorite.book_story.presentation.navigator.LocalNavigator
|
||||||
@Composable
|
@Composable
|
||||||
fun NavigationRail(tabs: List<NavigatorItem>) {
|
fun NavigationRail(tabs: List<NavigatorItem>) {
|
||||||
val navigator = LocalNavigator.current
|
val navigator = LocalNavigator.current
|
||||||
val currentTab = navigator.lastItem.collectAsStateWithLifecycle()
|
|
||||||
val layoutDirection = LocalLayoutDirection.current
|
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(
|
NavigationRail(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue