I'm creating a simple app with bottom navigation and drawer.

I wrap all screens inside a Scaffold with topbar and bottom bar. I want to hide top bar and bottom bar on a specific screen. Does anyone know to how achieve that

以下是设置导航的代码.

val navController = rememberNavController()
val scaffoldState = rememberScaffoldState(rememberDrawerState(DrawerValue.Closed))

Scaffold(
    bottomBar = {
        AppBottomBar(navController)
    },
    topBar = {
        AppTopBar(scaffoldState)
    },
    drawerContent = {
        DrawerContent(navController, scaffoldState)
    },
    scaffoldState = scaffoldState
) {
    // ovoid bottom bar overlay content
    Column(modifier = Modifier.padding(bottom = 58.dp)) {
        AppNavigation(navController)
    }
}

AppNavigation contains NavHost for navigating to screens

推荐答案

for now, I can achieve that by checking current route to show or hide bottomBar, topBar. But I think there's must be better solutions. The way I wrap all screens inside Scaffold might not right.

val navController = rememberNavController()
val scaffoldState = rememberScaffoldState(rememberDrawerState(DrawerValue.Closed))

Scaffold(
    bottomBar = {
        if (currentRoute(navController) != "Example Screen") {
            AppBottomBar(navController)
        }
    },
    topBar = {
        AppTopBar(scaffoldState)
    },
    drawerContent = {
        DrawerContent(navController, scaffoldState)
    },
    floatingActionButton = {
        FloatingButton(navController)
    },
    scaffoldState = scaffoldState
) {
    // ovoid bottom bar overlay content
    Column(modifier = Modifier.padding(bottom = 58.dp)) {
        AppNavigation(navController)
    }
}

@Composable
public fun currentRoute(navController: NavHostController): String? {
    val navBackStackEntry by navController.currentBackStackEntryAsState()
    return navBackStackEntry?.arguments?.getString(KEY_ROUTE)
}

Kotlin相关问答推荐

Kotlin-stdlib中的模拟扩展函数

处理合成层次 struct 中的深层按钮以切换视图

如何在不基于数据 map 的情况下将图例添加到lets plot kotlin

如何在 Kotlin 中初始化 Short 数组?

Kotlin - 如何避免在密封类的 when() 语句中转换第二个变量

Kotlin 协程按顺序执行,但仅在生产机器上执行

在 Kotlin 协程中切换 IO 和 UI 的正确方法是什么?

验证构造函数中的值组合

Jetpack Compose:当状态从另一个活动改变时强制重组

关于 Kotlin 函数类型转换的问题

如何使用 Findbugs 避免 kotlin 文件

在 Scaffold Jetpack Compose 内的特定屏幕上隐藏顶部和底部导航器

Kotlin:如何在活页夹中返回正在运行的服务实例?

Hilt Activity 必须附加到 @AndroidEntryPoint 应用程序

Kotlin 的类型具体化使哪些在 Java 或 Scala 中无法实现的成为可能?

Kotlin val difference getter override vs assignment

应用程序在使用 Google Play 服务时遇到问题

Kotlin - 是否可以在类中的 init 块之前初始化伴随对象?

保存对象时未填充 Spring Boot JPA@CreatedDate @LastModifiedDate

Kotlin - 如何获取注释属性值