Использование BottomSheetScaffold

Я новичок в этом. Но я хочу, чтобы BottomSheetScaffold отображал другое представление, найденное в моем файле MailView.kt, когда я нажимаю кнопку. Я хочу, чтобы лист был скрыт до тех пор, пока не будет нажата кнопка.

Но (BottomSheetState(BottomSheetValue.Hidden) и sheetState в моем коде выдают ошибку, я не знаю, как ее решить.

Невозможно найти параметр с таким именем:sheetState

Этот API материала является экспериментальным и, вероятно, будет изменен или удален в будущем.

Неразрешенная ссылка: скрыта

Для параметра onClose не передано значение

Это полный код:

      var showBottomSheet by remember { mutableStateOf(false) }
    val scaffoldState = rememberBottomSheetScaffoldState()
    val scope = rememberCoroutineScope()

    if (showBottomSheet) {
        BottomSheetScaffold(
            sheetState = BottomSheetState(BottomSheetValue.Hidden),
            sheetContent = {
                MailView(onClose = { showBottomSheet = false })
            },
            content = {
                MailView()
            }
        )
    }

И вот как мой button работает:

Button(
                                    onClick = { scope.launch { sheetState.show() } },
                                    colors = ButtonDefaults.buttonColors(
                                        containerColor = Color(
                                            0xffae52de
                                        )
                                    ),

ОБНОВЛЯТЬ:

Основываясь на рекомендуемом ответе, я попробовал это для BottomSheetScaffold:

val scope = rememberCoroutineScope()

val scaffoldState = rememberBottomSheetScaffoldState(bottomSheetState = rememberStandardBottomSheetState(skipHiddenState = false))

  BottomSheetScaffold(
        scaffoldState = scaffoldState,
        sheetContent = {
             MailView {
                scope.launch {
                    scaffoldState.bottomSheetState.hide()
                }
            })
        },
        content = {
            // Your main content
        },
        sheetPeekHeight = 0.dp // Ensure the sheet is hidden initially
    )

А это для кнопки:

Button(
    onClick = {
scope.launch {
scaffoldState.bottomSheetState.expand()
 }
}

Но, похоже, это не вызывает лист.

ОБНОВЛЯТЬ:

I wanted to know how I can shift the content of the BottomSheetScaffold up a bit further to the top. The content seems to be positioned a little too low in the sheet for me.

1
0
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы импортируете не ту версию rememberModalBottomSheetState. Версия material3 принимает Boolean и возвращает SheetState, но вам нужен androidx.compose.material.rememberModalBottomSheetState.

Редактировать:

Вот пример кнопки, которая при нажатии показывает нижний лист.

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Example() {
    val scope = rememberCoroutineScope()
    val scaffoldState = rememberBottomSheetScaffoldState(
        bottomSheetState = rememberStandardBottomSheetState(
            initialValue = PartiallyExpanded,
        ),
    )

    val hideBottomSheet: () -> Unit = {
        scope.launch { scaffoldState.bottomSheetState.partialExpand() }
    }

    BottomSheetScaffold(
        scaffoldState = scaffoldState,
        sheetContent = { MailView(hideBottomSheet) },
        sheetPeekHeight = 0.dp // Ensure the sheet is hidden instead of being partially expanded
    ) {
        Button(onClick = {
            scope.launch {
                scaffoldState.bottomSheetState.expand()
            }
        }) {
            Text("Show MailView")
        }
    }
}

@Composable
private fun MailView(onHide: () -> Unit) {
    Button(onClick = onHide) { Text("Hide") }
}

Спасибо. Поскольку приложение использует материал 3, я нашел и решил использовать BottomSheetScaffold. Но сейчас я получаю эти ошибки. ОБНОВЛЕНО

Mary Kay 29.05.2024 11:02

Я не уверен, почему ваш код не работает, я добавил на его основе рабочий пример. @Мэри Кей

Jan Itor 29.05.2024 20:17

Я попробовал, и в новом проекте это сработало! Мне просто интересно, не закрывает ли моя панель навигации ее, поскольку она маленькая. Есть ли способ заставить его почти заполнить весь экран?

Mary Kay 29.05.2024 23:42

ОБНОВЛЕНИЕ: Кажется, это можно решить, отправив код под всем остальным содержимым. Пожалуйста, у меня есть панель с кнопкой закрытия, логотипом и текстом, которая будет своего рода верхней панелью навигации на листе... Есть ли способ реализовать это так, чтобы она была на самом верху? Я не знаю, понимаете ли вы, что я имею в виду. Я обновлю изображением, пожалуйста. Потому что это выглядит немного странно. :)

Mary Kay 29.05.2024 23:57

Я не совсем понимаю, что вы имеете в виду. Также, пожалуйста, избегайте повторного редактирования сообщения с новыми вопросами, это создает нечитаемый беспорядок и снижает вероятность получения ответа. Если у вас есть новый вопрос, создайте новый пост с подробным объяснением. @Мэри Кей

Jan Itor 30.05.2024 07:01

Ой, ладно, пожалуйста. Мне очень жаль. Я не знал этого. Я просто хочу переместить содержимое BottomSheetScaffold немного выше. Мне кажется, что содержимое листа расположено слишком низко в нижней части листа (как на картинке). Мне нужна помощь, как продвинуть содержимое дальше.

Mary Kay 30.05.2024 07:53

в BottomSheetScaffold нет параметра с именемsheetState, вместо этого используйте scaffoldState и передайте ему переменную scaffoldState.

также добавьте @OptIn( ExperimentalMaterial3Api::class) поверх вашего @Composable( предупреждение будет удалено).

а для параметра «onClose» значение «Нет» не имеет ничего общего с BottomSheetScaffold, это означает, что компонуемое развлечение MailView() не имеет лямбда-параметр с именем onClose

реализация кода:

  val bottomSheetScaffoldState =
    rememberBottomSheetScaffoldState()

  
    BottomSheetScaffold(
        sheetState = scaffoldState,
        sheetContent = {
            // sheet content
        },
        content = {
           //scaffold content
        }
    )

Как добавить функцию hidden в файл BottomSheetScaffold. А оно появилось с кнопкой onClick? И какие элементы предполагается помещать в содержимое скаффолда? Я хочу отобразить другое представление MailView на самом листе.

Mary Kay 29.05.2024 15:00

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