From 0b099dee8ec8bfdca980735c22ef2d59a24def77 Mon Sep 17 00:00:00 2001 From: dany Date: Fri, 21 Nov 2025 15:45:08 +0300 Subject: [PATCH] feat: added bootom nav --- .../components/BottomNavigation.kt | 44 +++++++------------ .../presentation/navigation/TTasksApp.kt | 6 +-- .../presentation/navigation/TTasksNavHost.kt | 6 +++ .../screens/profile/ProfileScreen.kt | 9 ++++ 4 files changed, 31 insertions(+), 34 deletions(-) create mode 100644 app/src/main/java/com/prodhack/moscow2025/presentation/screens/profile/ProfileScreen.kt diff --git a/app/src/main/java/com/prodhack/moscow2025/presentation/components/BottomNavigation.kt b/app/src/main/java/com/prodhack/moscow2025/presentation/components/BottomNavigation.kt index 6c4a7b7..29556da 100644 --- a/app/src/main/java/com/prodhack/moscow2025/presentation/components/BottomNavigation.kt +++ b/app/src/main/java/com/prodhack/moscow2025/presentation/components/BottomNavigation.kt @@ -44,18 +44,20 @@ fun TBottomNavigation(modifier: Modifier = Modifier, selectedPage: Int, onSelect contentAlignment = Alignment.Center ) { - val firstIconPos = remember { mutableFloatStateOf(0f) } - val secondIconPos = remember { mutableFloatStateOf(0f) } - val thirdIconPos = remember { mutableFloatStateOf(0f) } + val homeIconPos = remember { mutableFloatStateOf(0f) } + val profileIconPos = remember { mutableFloatStateOf(0f) } val indicatorOffset = with(LocalDensity.current) { - when (selectedPage) { - 0 -> firstIconPos.floatValue - secondIconPos.floatValue - 1 -> 0f - 2 -> thirdIconPos.floatValue - secondIconPos.floatValue + val hasPositions = homeIconPos.floatValue != 0f || profileIconPos.floatValue != 0f + if (!hasPositions) return@with null + val center = (homeIconPos.floatValue + profileIconPos.floatValue) / 2f + val target = when (selectedPage) { + 1 -> homeIconPos.floatValue + 2 -> profileIconPos.floatValue else -> null - }?.toDp() + } + target?.let { (it - center).toDp() } } AnimatedVisibility(indicatorOffset != null) { indicatorOffset?.let { @@ -76,28 +78,12 @@ fun TBottomNavigation(modifier: Modifier = Modifier, selectedPage: Int, onSelect .size(30.dp) .onGloballyPositioned { it.parentCoordinates?.positionInParent()?.let { - firstIconPos.floatValue = it.x + homeIconPos.floatValue = it.x } } .noRippleClickable { onSelect(0) }, - painter = painterResource(R.drawable.ic_trips), - tint = animateColorAsState(if (selectedPage == 0) MaterialTheme.colorScheme.surfaceVariant else MaterialTheme.colorScheme.onSurfaceVariant).value, - contentDescription = "open trips list screen" - ) - - Icon( - modifier = Modifier - .size(30.dp) - .onGloballyPositioned { - it.parentCoordinates?.positionInParent()?.let { - secondIconPos.floatValue = it.x - } - } - .noRippleClickable { - onSelect(1) - }, painter = painterResource(R.drawable.ic_home), tint = animateColorAsState(if (selectedPage == 1) MaterialTheme.colorScheme.surfaceVariant else MaterialTheme.colorScheme.onSurfaceVariant).value, contentDescription = "open tasks screen" @@ -108,15 +94,15 @@ fun TBottomNavigation(modifier: Modifier = Modifier, selectedPage: Int, onSelect .size(30.dp) .onGloballyPositioned { it.parentCoordinates?.positionInParent()?.let { - thirdIconPos.floatValue = it.x + profileIconPos.floatValue = it.x } } .noRippleClickable { - onSelect(2) + onSelect(1) }, painter = painterResource(R.drawable.ic_profile), tint = animateColorAsState(if (selectedPage == 2) MaterialTheme.colorScheme.surfaceVariant else MaterialTheme.colorScheme.onSurfaceVariant).value, - contentDescription = "open tasks screen" + contentDescription = "open profile screen" ) } @@ -135,4 +121,4 @@ fun TBottomNavigationPreview() { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksApp.kt b/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksApp.kt index 1bf1391..56a4234 100644 --- a/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksApp.kt +++ b/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksApp.kt @@ -72,14 +72,10 @@ fun TTasksApp( ) { newPage -> when (newPage) { 0 -> { - TODO() - } - - 1 -> { appState.navController.navigate(AppDestination.Main.route) } - 2 -> { + 1 -> { appState.navController.navigate(AppDestination.Profile.route) } } diff --git a/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksNavHost.kt b/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksNavHost.kt index 9f75f4a..38b5a82 100644 --- a/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksNavHost.kt +++ b/app/src/main/java/com/prodhack/moscow2025/presentation/navigation/TTasksNavHost.kt @@ -10,6 +10,7 @@ import androidx.navigation.compose.composable import com.prodhack.moscow2025.presentation.screens.main.MainScreen import com.prodhack.moscow2025.domain.utils.NetworkError import com.prodhack.moscow2025.presentation.screens.login.LoginScreen +import com.prodhack.moscow2025.presentation.screens.profile.ProfileScreen import com.prodhack.moscow2025.presentation.screens.register.RegisterScreen import com.prodhack.moscow2025.presentation.utils.ErrorCallbacks import com.prodhack.moscow2025.presentation.utils.ErrorCollectorScope @@ -75,6 +76,11 @@ fun TTasksNavHost( composable(AppDestination.Main.route) { MainScreen() } + + composable(AppDestination.Profile.route) + { + ProfileScreen() + } } } } diff --git a/app/src/main/java/com/prodhack/moscow2025/presentation/screens/profile/ProfileScreen.kt b/app/src/main/java/com/prodhack/moscow2025/presentation/screens/profile/ProfileScreen.kt new file mode 100644 index 0000000..21ae1ed --- /dev/null +++ b/app/src/main/java/com/prodhack/moscow2025/presentation/screens/profile/ProfileScreen.kt @@ -0,0 +1,9 @@ +package com.prodhack.moscow2025.presentation.screens.profile + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +fun ProfileScreen(modifier: Modifier = Modifier) { + +} \ No newline at end of file