android: hide NavigationBar in comments screen

This commit is contained in:
Harsh Shandilya 2022-02-07 11:30:26 +05:30
parent 15da824d3e
commit 2b638fcc29
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
4 changed files with 40 additions and 13 deletions

View file

@ -106,6 +106,7 @@ fun LobstersApp(
ClawNavigationBar( ClawNavigationBar(
navController = navController, navController = navController,
items = navItems, items = navItems,
isVisible = navItems.any { it.route == currentDestination },
) )
}, },
) { ) {

View file

@ -15,10 +15,9 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import dev.msfjarvis.claw.android.R import dev.msfjarvis.claw.android.R
import dev.msfjarvis.claw.android.ui.AnimationDuration
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
private const val AnimationDuration = 100
@OptIn(ExperimentalAnimationApi::class) @OptIn(ExperimentalAnimationApi::class)
@Composable @Composable
fun ClawFab( fun ClawFab(

View file

@ -1,5 +1,11 @@
package dev.msfjarvis.claw.android.ui.decorations package dev.msfjarvis.claw.android.ui.decorations
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.FastOutLinearInEasing
import androidx.compose.animation.core.LinearOutSlowInEasing
import androidx.compose.animation.core.tween
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.NavigationBarItem
@ -12,26 +18,45 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.navigation.NavController import androidx.navigation.NavController
import dev.msfjarvis.claw.android.ui.AnimationDuration
@Composable @Composable
fun ClawNavigationBar( fun ClawNavigationBar(
navController: NavController, navController: NavController,
items: List<NavigationItem>, items: List<NavigationItem>,
isVisible: Boolean,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
var selectedIndex by remember { mutableStateOf(0) } var selectedIndex by remember { mutableStateOf(0) }
NavigationBar(modifier = modifier) { AnimatedVisibility(
items.forEachIndexed { index, navItem -> visible = isVisible,
NavigationBarItem( enter =
icon = { Icon(painter = navItem.icon, contentDescription = navItem.label) }, slideInVertically(
label = { Text(text = navItem.label) }, // Enters by sliding up from offset 0 to fullHeight.
selected = selectedIndex == index, initialOffsetY = { fullHeight -> fullHeight },
onClick = { animationSpec = tween(durationMillis = AnimationDuration, easing = LinearOutSlowInEasing),
selectedIndex = index ),
navController.navigate(navItem.route) exit =
} slideOutVertically(
) // Exits by sliding up from offset 0 to -fullHeight.
targetOffsetY = { fullHeight -> fullHeight },
animationSpec = tween(durationMillis = AnimationDuration, easing = FastOutLinearInEasing),
),
modifier = Modifier,
) {
NavigationBar(modifier = modifier) {
items.forEachIndexed { index, navItem ->
NavigationBarItem(
icon = { Icon(painter = navItem.icon, contentDescription = navItem.label) },
label = { Text(text = navItem.label) },
selected = selectedIndex == index,
onClick = {
selectedIndex = index
navController.navigate(navItem.route)
}
)
}
} }
} }
} }

View file

@ -27,6 +27,8 @@ import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.database.local.SavedPost
import kotlin.math.ln import kotlin.math.ln
const val AnimationDuration = 100
// The destination needs to be tracked like this rather than used directly since // The destination needs to be tracked like this rather than used directly since
// `NavController#currentDestination` is not a Composable state. // `NavController#currentDestination` is not a Composable state.
@Composable @Composable