Отображение BottomSheetScaffold с BottomNavigation — Compose UI — Android

Используя Compose UI, у меня есть нижняя панель навигации и нижний лист,

поэтому запуск «BottomSheetScaffold» с экрана «Каталог» приводит к тому, что «Нижняя панель навигации» остается видимой.

Как я могу показать «BottomSheetScaffold», чтобы он покрывал весь экран (закрывая нижнюю панель навигации), но помня о том, чтобы написать «BottomSheetScaffold» на самом экране создания [Каталог], а НЕ на более высоком уровне (уровень родительской активности ) так как это не кажется правильным

2 ответа

Если я правильно понял вопрос, вы можете обернуть свой контент ModalBottomSheetLayout.

      ModalBottomSheetLayout(
    sheetState = modalBottomSheetState,
    sheetContent = {
        BottomSheetContent()
    }
) {
    Scaffold(...)
}

Результат будет примерно таким:

Это не совсем связано с вашим вопросом, но если вы хотите избежать полурасширенного состояния, вы можете сделать следующее:

  1. Объявите функцию ниже:
      @ExperimentalMaterialApi
suspend fun ModalBottomSheetState.forceExpand() {
    try {
        animateTo(ModalBottomSheetValue.Expanded)
    } catch (e: CancellationException) {
        currentCoroutineContext().ensureActive()
        forceExpand()
    }
}
  1. В объявлении нижнего листа сделайте следующее:
      val modalBottomSheetState = rememberModalBottomSheetState(
    initialValue = ModalBottomSheetValue.Hidden,
    confirmStateChange = {
        it != ModalBottomSheetValue.HalfExpanded
    }
)
  1. Вызовите следующее, чтобы показать/скрыть нижний лист:
      coroutineScope.launch {
    if (modalBottomSheetState.isVisible) {
        modalBottomSheetState.hide()
    } else {
        modalBottomSheetState.forceExpand()
    }
}

Временное решение, которое я использую, - это передача лямбда-функции, которая изменит видимость нижней панели для создания экрана.

Другие вопросы по тегам