Я новичок в этом. Но я хочу, чтобы 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.
Вы импортируете не ту версию 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") }
}
Я не уверен, почему ваш код не работает, я добавил на его основе рабочий пример. @Мэри Кей
Я попробовал, и в новом проекте это сработало! Мне просто интересно, не закрывает ли моя панель навигации ее, поскольку она маленькая. Есть ли способ заставить его почти заполнить весь экран?
ОБНОВЛЕНИЕ: Кажется, это можно решить, отправив код под всем остальным содержимым. Пожалуйста, у меня есть панель с кнопкой закрытия, логотипом и текстом, которая будет своего рода верхней панелью навигации на листе... Есть ли способ реализовать это так, чтобы она была на самом верху? Я не знаю, понимаете ли вы, что я имею в виду. Я обновлю изображением, пожалуйста. Потому что это выглядит немного странно. :)
Я не совсем понимаю, что вы имеете в виду. Также, пожалуйста, избегайте повторного редактирования сообщения с новыми вопросами, это создает нечитаемый беспорядок и снижает вероятность получения ответа. Если у вас есть новый вопрос, создайте новый пост с подробным объяснением. @Мэри Кей
Ой, ладно, пожалуйста. Мне очень жаль. Я не знал этого. Я просто хочу переместить содержимое BottomSheetScaffold немного выше. Мне кажется, что содержимое листа расположено слишком низко в нижней части листа (как на картинке). Мне нужна помощь, как продвинуть содержимое дальше.
в 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 на самом листе.
Спасибо. Поскольку приложение использует материал 3, я нашел и решил использовать BottomSheetScaffold. Но сейчас я получаю эти ошибки. ОБНОВЛЕНО