Как идиоматически правильно будет вызывать открытие-закрытие боттомшита? Вариант А - мутировать

булевую переменную стейта внутри условного onClick, а шит открывать внутри LaunchedEffect.

LaunchedEffect(isSheetHidden) {
if (isSheetHidden) sheetState.hide() else sheetState.show()
}

или вариант Б - использовать rememberCoroutineScope и запускать руками scope.launch { sheetState.show() }?

4 ответов

12 просмотров

Вот такое подходит? https://github.com/androidx/androidx/blob/androidx-main/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BottomSheetScaffoldSamples.kt

Vitaliy Babichev
Вот такое подходит? https://github.com/androidx/a...

Подходит. Вернее, оба варианта одинаково задачу выполняют, но я вдруг задумался о том, а не является ли один из них не “православным”. ¯\_(ツ)_/¯ С одной стороны есть документация, которая четко гласит: 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>

lounah
<toxic-mode>помню, как до компоуз, открытие диалог...

Та да, особенно когда только появился FragmentDialog (или DialogFragment? Не помню уже), и использование "старых" диалогов, включая максимально простой AlertDialog, внезапно стало discouraged.

Похожие вопросы

Обсуждают сегодня

я часов 15 назад начал пытаться написать хоть что-то напоминающее ос и у меня есть проблема, которую я пытаюсь решить последние часов 5: есть крч 2 исходника с минимальным код...
Al1to
17
Всем привет ребят! Мб кто-то сталкивался? adminСomponents .get("searchСomponents", use: searchComponents) .openAPI( summary: ...
Admin Adminov
2
Кто сколько за бота берёт? (Я покупать не хочу)
Ivan Aleksandrovich
10
Век живи, век учись и продолжай удивляться Carbon Оказывается, в Carbon дату можно задавать даже текстом 😲 <?php use Carbon\Carbon; $october_date = new Carbon("last sunday o...
Igor
3
Приветы. Если бот доступен только пользователям из России и Беларуси, старсы для него неизбежны? Как Apple планируется собирать платежи с покупок в сторе на территориях, где у...
Prokhor Chulkov
8
Qq, возможно сталкивался кто Повесил на бота обработку апдейтов типа chat_member, при этом апдейты доходят только когда с ботом что-то делают, на саб/ансаб юзеров ему насрать...
𐌍𐌄 ᕓ𐌄𐌓𐌌Ꝋ𐌓𐌄
13
В тг возможно создать интерактивный/playable баннер? Т.е. не то что через браузер открывается, а прямо сам пост в чате или канале?
Meles
3
кто-нибудь отправлял ли групповые медиа с entites? что бы были гипер ссылки const result = await this.client.invoke( new Api.messages.SendMultiMedia({ silen...
Kokni
3
Вопрос в другом, кто нибудь вообще понял как жаловаться на незаконные платежи?
■_|ilya|_■
8
всем привет. может кто-нибудь сталкивался с такой проблемой? отсылали базу в odoo upgrade service с 12 на 17 версию, в базе которую они прислали в ответ заметили вот такие стр...
Pavel
6
Карта сайта