Skip to content

Commit 1aabf48

Browse files
committed
Fix lack of navbar shadow issue
- added shadow - rounded corners
1 parent 261fdcc commit 1aabf48

3 files changed

Lines changed: 76 additions & 41 deletions

File tree

app/build.gradle.kts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ android {
4848
}
4949
}
5050
composeOptions {
51-
kotlinCompilerExtensionVersion = "1.5.3"
51+
kotlinCompilerExtensionVersion = "1.7.0"
5252
}
5353

5454
compileOptions {
@@ -62,9 +62,9 @@ android {
6262

6363
dependencies {
6464
// Jetpack Compose dependencies
65-
implementation(platform("androidx.compose:compose-bom:2024.01.00"))
66-
implementation("androidx.compose.ui:ui:1.4.0")
67-
implementation("androidx.compose.ui:ui-tooling-preview")
65+
implementation(platform("androidx.compose:compose-bom:2024.09.00"))
66+
implementation("androidx.compose.material3:material3")
67+
implementation("androidx.compose.ui:ui:1.9.4")
6868
implementation("androidx.compose.ui:ui-tooling-preview:1.4.3")
6969
implementation("androidx.activity:activity-compose")
7070
implementation("androidx.lifecycle:lifecycle-viewmodel-compose")
@@ -100,8 +100,9 @@ apollo {
100100
service("service") {
101101
packageName.set("com.example.score")
102102
introspection {
103-
endpointUrl.set("https://score.cornellappdev.com/graphql")
103+
endpointUrl.set("https://score-dev.cornellappdev.com/graphql")
104104
schemaFile.set(file("src/main/graphql/schema.graphqls"))
105105
}
106106
}
107-
}
107+
}
108+

app/src/main/java/com/cornellappdev/score/nav/ScoreNavigationBar.kt

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,72 @@
11
package com.cornellappdev.score.nav
22

3+
import androidx.compose.foundation.layout.fillMaxWidth
4+
import androidx.compose.foundation.shape.RoundedCornerShape
35
import androidx.compose.material3.Icon
46
import androidx.compose.material3.NavigationBar
57
import androidx.compose.material3.NavigationBarItem
68
import androidx.compose.material3.NavigationBarItemDefaults
9+
import androidx.compose.material3.Surface
710
import androidx.compose.material3.Text
811
import androidx.compose.runtime.Composable
912
import androidx.compose.ui.Modifier
1013
import androidx.compose.ui.graphics.Color
1114
import androidx.compose.ui.res.painterResource
1215
import androidx.compose.ui.tooling.preview.Preview
16+
import androidx.compose.ui.unit.dp
1317
import androidx.navigation.NavBackStackEntry
1418
import com.cornellappdev.score.nav.root.ScoreScreens
1519
import com.cornellappdev.score.nav.root.tabs
1620
import com.cornellappdev.score.nav.root.toScreen
1721
import com.cornellappdev.score.theme.CrimsonPrimary
1822
import com.cornellappdev.score.theme.GrayPrimary
1923
import com.cornellappdev.score.theme.Style.bodyMedium
20-
import com.cornellappdev.score.theme.White
2124

2225
@Composable
2326
fun ScoreNavigationBar(
2427
navigateToScreen: (ScoreScreens) -> Unit,
2528
navBackStackEntry: NavBackStackEntry?,
2629
modifier: Modifier = Modifier,
2730
) {
28-
NavigationBar(modifier = modifier, containerColor = White) {
29-
tabs.map { item ->
30-
val isSelected = item.screen == navBackStackEntry?.toScreen()
31+
Surface(
32+
modifier = Modifier
33+
.fillMaxWidth(),
34+
color = Color.White,
35+
shape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),
36+
) {
37+
NavigationBar(
38+
modifier = modifier,
39+
containerColor = Color.Transparent
40+
) {
41+
tabs.map { item ->
42+
val isSelected = item.screen == navBackStackEntry?.toScreen()
3143

32-
NavigationBarItem(
33-
selected = isSelected,
34-
onClick = { navigateToScreen(item.screen) },
35-
colors = NavigationBarItemDefaults.colors().copy(
36-
selectedIndicatorColor = Color.Transparent
37-
),
38-
icon = {
39-
Icon(
40-
painter = painterResource(id = if (isSelected) item.selectedIcon else item.unselectedIcon),
41-
contentDescription = null,
42-
tint = Color.Unspecified
43-
)
44-
},
45-
label = {
46-
Text(
47-
text = item.label,
48-
style = bodyMedium,
49-
color = if (isSelected) {
50-
CrimsonPrimary
51-
} else {
52-
GrayPrimary
53-
}
54-
)
55-
}
56-
)
44+
NavigationBarItem(
45+
selected = isSelected,
46+
onClick = { navigateToScreen(item.screen) },
47+
colors = NavigationBarItemDefaults.colors().copy(
48+
selectedIndicatorColor = Color.Transparent
49+
),
50+
icon = {
51+
Icon(
52+
painter = painterResource(id = if (isSelected) item.selectedIcon else item.unselectedIcon),
53+
contentDescription = null,
54+
tint = Color.Unspecified
55+
)
56+
},
57+
label = {
58+
Text(
59+
text = item.label,
60+
style = bodyMedium,
61+
color = if (isSelected) {
62+
CrimsonPrimary
63+
} else {
64+
GrayPrimary
65+
}
66+
)
67+
}
68+
)
69+
}
5770
}
5871
}
5972
}

app/src/main/java/com/cornellappdev/score/nav/root/RootNavigation.kt

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,20 @@ import androidx.compose.animation.core.keyframes
66
import androidx.compose.animation.core.rememberInfiniteTransition
77
import androidx.compose.foundation.layout.Box
88
import androidx.compose.foundation.layout.fillMaxSize
9+
import androidx.compose.foundation.layout.fillMaxWidth
910
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.shape.RoundedCornerShape
1012
import androidx.compose.material3.Scaffold
13+
import androidx.compose.material3.Surface
1114
import androidx.compose.runtime.Composable
1215
import androidx.compose.runtime.CompositionLocalProvider
1316
import androidx.compose.runtime.LaunchedEffect
1417
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.draw.dropShadow
19+
import androidx.compose.ui.graphics.Color
20+
import androidx.compose.ui.graphics.shadow.Shadow
21+
import androidx.compose.ui.unit.DpOffset
22+
import androidx.compose.ui.unit.dp
1523
import androidx.hilt.navigation.compose.hiltViewModel
1624
import androidx.navigation.NavBackStackEntry
1725
import androidx.navigation.compose.currentBackStackEntryAsState
@@ -20,13 +28,13 @@ import androidx.navigation.toRoute
2028
import com.cornellappdev.score.R
2129
import com.cornellappdev.score.nav.ScoreNavHost
2230
import com.cornellappdev.score.nav.ScoreNavigationBar
23-
import com.cornellappdev.score.nav.root.ScoreScreens.GameDetailsPage
2431
import com.cornellappdev.score.theme.LocalInfiniteLoading
2532
import com.cornellappdev.score.theme.White
2633
import kotlinx.serialization.Serializable
2734

2835
@Composable
2936
fun RootNavigation(
37+
modifier: Modifier = Modifier,
3038
rootNavigationViewModel: RootNavigationViewModel = hiltViewModel(),
3139
) {
3240
val navController = rememberNavController()
@@ -55,19 +63,32 @@ fun RootNavigation(
5563
}
5664
}
5765

58-
5966
Scaffold(
60-
modifier = Modifier.fillMaxSize(), bottomBar = {
61-
if (navBackStackEntry?.toScreen() is GameDetailsPage) {
67+
modifier = modifier.fillMaxSize(), bottomBar = {
68+
if (navBackStackEntry?.toScreen() is ScoreScreens.GameDetailsPage) {
6269
return@Scaffold
6370
}
64-
ScoreNavigationBar({ navController.navigate(it) }, navBackStackEntry)
71+
Surface(
72+
modifier = Modifier
73+
.fillMaxWidth()
74+
.dropShadow(
75+
shape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),
76+
shadow = Shadow(
77+
radius = 6.dp,
78+
color = Color.Black.copy(alpha = 0.07f),
79+
offset = DpOffset(0.dp, (-5).dp)
80+
)
81+
),
82+
color = Color.White,
83+
shape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp)
84+
) {
85+
ScoreNavigationBar({ navController.navigate(it) }, navBackStackEntry)
86+
}
6587
},
6688
containerColor = White
6789
) { innerPadding ->
6890
Box(modifier = Modifier.padding(innerPadding)) {
6991
CompositionLocalProvider(LocalInfiniteLoading provides animatedValue) {
70-
7192
ScoreNavHost(navController)
7293
}
7394
}

0 commit comments

Comments
 (0)