булевую переменную стейта внутри условного onClick, а шит открывать внутри LaunchedEffect.
LaunchedEffect(isSheetHidden) {
if (isSheetHidden) sheetState.hide() else sheetState.show()
}
или вариант Б - использовать rememberCoroutineScope и запускать руками scope.launch { sheetState.show() }?
Вот такое подходит? https://github.com/androidx/androidx/blob/androidx-main/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BottomSheetScaffoldSamples.kt
Подходит. Вернее, оба варианта одинаково задачу выполняют, но я вдруг задумался о том, а не является ли один из них не “православным”. ¯\_(ツ)_/¯ С одной стороны есть документация, которая четко гласит: This function should not be used to (re-)launch ongoing tasks in response to callback events by way of storing callback data in MutableState passed to key1. Instead, see rememberCoroutineScope to obtain a CoroutineScope that may be used to launch ongoing jobs scoped to the composition in response to event callbacks. , то бишь есть доступ к скоупу и нужно использовать его, а с другой стороны открытый боттомшит может быть частью стейта экрана, и тут без LaunchedEffect не обойтись.
<toxic-mode>помню, как до компоуз, открытие диалога сводилось к одному простому коллбеку без каких-то переусложений :) </toxic-mode>
Та да, особенно когда только появился FragmentDialog (или DialogFragment? Не помню уже), и использование "старых" диалогов, включая максимально простой AlertDialog, внезапно стало discouraged.
Обсуждают сегодня