Compose Broadcast
Kanalga Telegram’da o‘tish
Все о Jetpack Compose и Compose Multiplatform YouTubе канал: https://youtube.com/androidBroadcast Android - @android_broadcast iOS - @ios_broadcast Kotlin - @kotlin_broadcast
Ko'proq ko'rsatish5 921
Obunachilar
+324 soatlar
+17 kunlar
+930 kunlar
Ma'lumot yuklanmoqda...
O'xshash kanallar
Taglar buluti
Kirish va chiqish esdaliklari
---
---
---
---
---
---
Obunachilarni jalb qilish
Iyul '26
Iyul '26
+11
0 kanalda
Iyun '26
+48
2 kanalda
Get PRO
May '26
+74
0 kanalda
Get PRO
Aprel '26
+91
1 kanalda
Get PRO
Mart '26
+71
2 kanalda
Get PRO
Fevral '26
+51
1 kanalda
Get PRO
Yanvar '26
+47
0 kanalda
Get PRO
Dekabr '25
+104
2 kanalda
Get PRO
Noyabr '25
+62
0 kanalda
Get PRO
Oktabr '25
+298
3 kanalda
Get PRO
Sentabr '25
+106
5 kanalda
Get PRO
Avgust '25
+76
1 kanalda
Get PRO
Iyul '25
+54
1 kanalda
Get PRO
Iyun '25
+53
1 kanalda
Get PRO
May '25
+162
7 kanalda
Get PRO
Aprel '25
+109
3 kanalda
Get PRO
Mart '25
+74
1 kanalda
Get PRO
Fevral '25
+110
2 kanalda
Get PRO
Yanvar '25
+81
0 kanalda
Get PRO
Dekabr '24
+254
2 kanalda
Get PRO
Noyabr '24
+116
2 kanalda
Get PRO
Oktabr '24
+255
2 kanalda
Get PRO
Sentabr '24
+121
1 kanalda
Get PRO
Avgust '24
+199
1 kanalda
Get PRO
Iyul '24
+108
1 kanalda
Get PRO
Iyun '24
+153
1 kanalda
Get PRO
May '24
+269
4 kanalda
Get PRO
Aprel '24
+393
5 kanalda
Get PRO
Mart '24
+159
3 kanalda
Get PRO
Fevral '24
+197
3 kanalda
Get PRO
Yanvar '24
+220
2 kanalda
Get PRO
Dekabr '23
+130
3 kanalda
Get PRO
Noyabr '23
+116
4 kanalda
Get PRO
Oktabr '23
+379
3 kanalda
Get PRO
Sentabr '23
+67
0 kanalda
Get PRO
Avgust '23
+2 598
0 kanalda
| Sana | Obunachilarni jalb qilish | Esdaliklar | Kanallar | |
| 09 Iyul | +4 | |||
| 08 Iyul | +1 | |||
| 07 Iyul | +1 | |||
| 06 Iyul | +3 | |||
| 05 Iyul | 0 | |||
| 04 Iyul | 0 | |||
| 03 Iyul | 0 | |||
| 02 Iyul | +2 | |||
| 01 Iyul | 0 |
Kanal postlari
⚙️ Мигрировать на Navigation 3 можно, но только всё приложение разом. И это не единственная засада
Честный кейс от разработчицы: она в одиночку перевела приложение на 170+ экранов с Nav2 на Nav3 🤯. Не пересказ доков, а грабли из прода. Объем работы: 302 файла (по сути весь app), 2 недели разработки с овертаймами, ~1.5 недели стабилизации, 1 хотфикс.
Что стоит забрать себе ещё до старта:
Поэтапно не выйдет. Обратной совместимости между Nav2 и Nav3 нет, мигрируешь либо всё сразу, либо никак. Отсюда огромный affected area и главная организационная боль: команда не фризила разработку, коллеги параллельно пилили новые экраны на старой навигации. Чем дольше тянешь, тем дороже разгребать merge-конфликты. Вывод: закладывай отдельный спринт и закрывай быстро, не размазывай.
Bottom Sheets из коробки в навигации нет. Если у тебя, как у автора, шторки живут внутри навигационного стека, готового решения на старте не было. Пришлось городить обёртку вокруг
entry<> с флагом в metadata и вручную разруливать, что рисовать через ModalBottomSheetLayout, а что через NavDisplay:
val NavEntry<out NavKey>.isBottomSheet: Boolean
get() = metadata["isBottomSheet"] as? Boolean == true
NavDisplay(
entries = navigationState.toEntries(mainEntryProvider)
.filter { it.isBottomSheet.not() },
onBack = { navigator.goBack() },
)
Сейчас это решается официально через BottomSheetSceneStrategy, свой костыль автор потом выкинула. Мигрируешь сегодня — сразу проверь, что шторки ложатся на SceneStrategy, а не переоткрывай этот велосипед. ⚠️ И отдельный подвох: шторка часть стека, и если перед переходом на следующий экран не закрыть её руками, back вернёт её обратно. Легко забыть.
Сериализация уронит тебя уже в проде. 💥 Всё, что прокидываешь через навигацию, должно быть @Serializable. Автор прокинула entryPoint: NavKey (чтобы при блокировке юзера возвращать на нужный экран через несколько назад), а сам NavKey сериализуемым не был:
Fatal Exception: kotlinx.serialization.SerializationException
Ловушка в том, что краш не в обычном флоу, а в отдельных сценариях восстановления, поэтому проходит ревью и ручные тесты, а ловится только у юзеров. Лечится обёрткой:
@Serializable
open class NavStateSerializable : NavKey
Мой вывод: миграция оправданная, если на карте планшеты/фолды и adaptive layouts (тут Nav3 реально снимает боль), а навигация уже на Compose. Но держи в голове, что это не «обновить либу», а big-bang рефактор с регрессиями. Я бы не лез, если сидишь на фрагментах (сначала выпиливать их), поджимают сроки или свой навигатор и так стабильно работает.
🔗 Полный разбор с кодом и схемами на Medium
#Compose #Navigation3 #Android| 2 | 📹 What's New in Compose Multiplatform | Sebastian Aigner and Márton Braun | Kotlin Conf 2026
37 минут от Sebastian Aigner и Marton Braun (JetBrains) про всё, что вышло за последний год. Хорошо структурированный доклад: общие изменения, потом iOS, потом Web.
Ключевое:
👉 Navigation 3 — стабильный в CMP. Бэкстек это просто SnapshotStateList<NavKey>, которым управляешь сам. Адаптивные Scene-API, нативные iOS-жесты, browser history на Web из коробки.
👉 Compose Hot Reload — стабильный, встроен в новые проекты без настройки. Работает и с AI-агентами: IDE подхватывает правки в файлах и перезагружает UI сама.
👉 @Preview унифицировали: androidx.compose.ui.tooling.preview.Preview теперь работает в commonMain. Прошлые аннотации deprecated.
👉 iOS: параллельный render pipeline по умолчанию в 1.11 (+20% на сложных лейаутах), placedAsOverlay для нативных Liquid Glass-компонентов, полноценный нативный ввод с magnifier / translate / autofill / кастомными IME.
👉 Web (beta): HTMLElementView для HTML прямо в Composition, VoiceOver через семантику, Coil на web workers.
👉 Из цифр в докладе: Kuaishou (250M DAU) и Tencent Video (340M MAU) уже работают на CMP-экранах. По iOS-блоку видно, что команда за год реально закрыла большинство «но» для старта
0:00 Вступление: что такое Compose Multiplatform
2:04 Масштаб: Perk, Alipay, Kuaishou, Tencent
4:06 Демо: структура нового проекта
5:40 Compose Hot Reload
8:49 Паритет с Jetpack Compose
10:24 Navigation 3
16:05 Единая аннотация @Preview
17:39 iOS: новый pipeline рендеринга
19:43 iOS: Liquid Glass и overlay interop
27:00 iOS: нативный ввод текста
31:11 Web: HTML interop
33:46 Web: доступность и производительность
35:50 Итоги
#ComposeMultiplatform #KMP #Navigation3 #KotlinConf | 3 067 |
| 3 | 🐱 DrawBox 2.0: Compose-библиотека для рисования на KMP
DrawBox работала как Android-only с 2021 года. В конце мая вышел 2.0.0-alpha02 с таргетами Android, iOS, JVM/Desktop и WASM. Живая демка работает прямо в браузере без установки.
В 2.0 добавили: SVG и JSON экспорт, бесконечный канвас с зумом и паном, выделение и перетаскивание фигур, коннекторы, object eraser и Roborazzi тесты.
Автор написал пост про перенос, и самый ценный кусок там не про KMP. Самая интересная часть - использование MVI. Один State, Intent на каждое действие, Reducer с (State, Intent) → State. После этого undo/redo - это стек из State, JSON-сериализация практически бесплатна, и логика платформ физически не может разъехаться.
#Compose #KMP #ComposeMultiplatform | 4 278 |
| 4 | 🤖 Android-приложение — это не только красивый экран. За ним стоят работа с внешним API, загрузка данных, разделение логики по слоям и архитектура, которую можно поддерживать без хаоса в коде.
🗓 2 июля в 20:00 МСК открытый вебинар в преддверии старта курса «Android-разработчик. Базовый уровень» пройдём полный цикл:
— от запроса к серверу;
— до загрузки фото и описания;
— через слои по принципам Clean Architecture и MVVM.
Покажем, как именно данные добираются до экрана и что с ними происходит по пути.
➡️ Вебинар подойдёт тем, кто начинает карьеру в Android-разработке и хочет понять, как создаются приложения в реальной работе.
➡️ Регистрируйтесь и разберитесь, как связать сервер, архитектуру и экран в одном Android-приложении.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru | 1 839 |
| 5 | ⚙️ skydoves выпустил Compose HotSwan v2 Beta для Android: заменить весь экран без рестарта приложения
v1 умел одно — применять изменения значений без rebuild: цвет, padding, текст, размеры — результат за секунду, приложение живёт. Добавить composable, переставить layout, поменять control flow — всё это шло в полный rebuild.
v2 убирает эту границу. Без рестарта приложения: добавляем и удаляем composable-функции, меняем структуру layout, переписываем conditional UI. И главное — заменяем целый экран на совершенно другой код. Навигационный стек и remember-состояние сохраняются.
Технически v2 запускает изменения через собственный интерпретатор, обходя ограничения ART на переопределение классов — тот же подход, что у Flutter. При слишком глубоких изменениях деградирует плавно: сбрасывает composition с сохранением rememberSaveable и ViewModel, в крайнем случае рестартит Activity. Полный rebuild нужен только при изменении сигнатур функций, иерархии классов и inline-функций.
В v2 также MCP-сервер: AI-агент триггерит reload, снимает скриншот с устройства, итерирует по вариантам. Claude Code и Cursor работают из коробки через file watcher.
Поставить: IDE-плагин вручную с бета-канала Marketplace + Gradle-плагин 2.0.0-beta01:
[plugins]
hotswan-compiler = { id = "com.github.skydoves.compose.hotswan.compiler", version = "2.0.0-beta01" }
Инструмент платный инструмент, лицензия и цены на hotswan.dev/pricing.
Такого охвата hot reload в нативном Compose ещё не было. Аргумент Flutter про быстрый feedback loop заметно слабеет.
#Compose #JetpackCompose #AndroidDev | 5 731 |
| 6 | 🐱 Kamera 1.0: стабильная камера для Compose Multiplatform
Камера в CMP это всегда возня с expect/actual и тремя платформенными бэкендами. Kamera (бывшая CameraK) закрывает это одним Compose-first слоем: один @Composable-вход, под капотом CameraX на Android, AVFoundation на iOS и JavaCV на Desktop.
API реактивный, через состояние. Заводишь rememberCameraKState(), получаешь StateFlow<CameraKState> c ветками Initializing, Ready(controller, uiState) и Error, и рисуешь превью, когда камера готова:
val cameraState by rememberCameraKState(
config = CameraConfiguration(
cameraLens = CameraLens.BACK,
aspectRatio = AspectRatio.RATIO_16_9,
),
)
when (val state = cameraState) {
is CameraKState.Ready -> CameraPreviewView(state.controller)
is CameraKState.Initializing -> CircularProgressIndicator()
is CameraKState.Error -> Text(state.message)
}
Из коробки: зум, вспышка, фонарь, переключение линз (ultra-wide/telephoto на iOS), takePictureToFile() для прямого сохранения в файл. Сверху плагины, которые сами активируются на Ready: сохранение фото, QR/штрихкоды, OCR, запись видео с pause/resume и лимитом длительности, анализ кадров через analyzer.
Главное в 1.0: починили то, что мешало брать в прод. На iOS фронталка отдавала тёмные кадры из-за бага в MemoryManager, хотя превью выглядело нормально. На Android фото оказывалось кропом вместо настроенного аспекта, теперь что видишь, то и снимаешь. Плюс вычистили утечки корутин в плагинах при ре-ините камеры.
‼️ Это молодая 1.0 и по сути проект одного мейнтейнера под Apache-2.0. Блокеры выше жили буквально до вчера, так что 1.0 это точка, где их закрыли, а не годы шлифовки. Desktop тянет JavaCV с нативными либами, это тяжело. Но если нужна камера в CMP без трёх реализаций руками, смотреть стоит.
🐱 GitHub
#Compose #ComposeMultiplatform #KMP | 5 144 |
| 7 | ⚙️ Compose Stability Analyzer 0.10.0: Stability Doctor и trace-all
skydoves выпустил 0.10.0 с двумя фичами, которые доделывают логику инструмента.
1️⃣ Stability Doctor берёт все сигналы плагина (статику, Cascade, Reality Check, Blame) и выдаёт приоритизированный список: что чинить и в каком порядке. Без девайса — ESTIMATED (только статика), с live heatmap — MEASURED (ложные тревоги уходят вниз в рейтинге). Фиксы применяются двойным кликом с предпросмотром.
2️⃣ trace-all mode. Раньше Doctor получал runtime-данные только по @TraceRecomposition функциям, то есть видел не весь модуль. Trace-all инструментирует всё:
composeStabilityAnalyzer {
traceAll {
enabled.set(true)
threshold.set(2)
variants.set(listOf("debug"))
}
}
Release-сборки не трогает. Теперь рейтинг Doctor строится по реальным замерам на всём модуле, а не только там, где успел поставить аннотацию.
Раньше надо было самому решать что смотреть и куда ставить аннотации. Теперь включаешь trace-all, запускаешь Doctor, получаешь список с конкретными fix'ами.
🔗 doveletter.dev
🐱 GitHub
#Compose #Performance | 4 715 |
| 8 | ⚙️ Compose Navigation Graph: вся навигация приложения интерактивной картой прямо в Android Studio
Плагин от skydoves (Jaewoong Eum). Аннотируешь экраны @NavDestination, @NavEdge, @NavGraphRoot, KSP статически собирает граф, а IDE-плагин рисует карту: каждый экран отрендеренной @Preview-миниатюрой через Layoutlib, без эмулятора. Переходы стрелками, двойной клик прыгает в исходник, граф мёржится по всем модулям. Канвас редактируемый — тянешь связь от экрана к экрану, и плагин сам вписывает @NavEdge в код.
Работает с Navigation 3, Navigation 2 и даже голыми Activity. KMP из коробки: аннотации в commonMain, есть сэмпл на KotlinConf-приложении (26 экранов, 36 переходов).
Бонусом .nav baseline по аналогии с apiDump/apiCheck: navCheck валит сборку, когда граф разъезжается с закоммиченным базелайном.
#Compose #AndroidStudio | 8 655 |
| 9 | Вам нужен Liquid Glass эффект в Compose Multiplatform? | 5 725 |
| 10 | ⚙️ JetBrains выкатили статью в документации как использовать Liquid Glass эффект из iOS 26 и Compose на iOS.
Всё сводится к более точечному встраиванию Compose экранов в iOS Controller и перекладывание навигации на нативные элементы.
#Compose #iOS #iOS26 #LiquidGlass | 5 490 |
| 11 | Представлена альфа-версия 0.0.4 проекта адаптации Compose Multiplatform для ОС Аврора
Проведена глубокая работа над инструментарием, экосистемой и стабильностью фреймворка, чтобы разработчики могли комфортно создавать мобильные приложения для доверенной операционной системы используя привычный инструментарий — язык программирования Kotlin.
Альфа-версия фреймворка Compose Multiplatform опубликована в репозитории mos.hub под открытой лицензией. Каждый желающий имеет возможность внести свой вклад и, тем самым, повлиять на развитие проекта.
Главные изменения в альфа-версии 0.0.4 проекта адаптации Compose Multiplatform для ОС Аврора:
Инструментарий разработчика
• Aurora Build — Gradle-плагин для сборки проектов под ОС Аврора
• Aurora Devices — Gradle-плагин для запуска приложений на устройстве и в эмуляторе
Расширение возможностей фреймворка
• Поддержка системного буфера обмена
• Поддержка ресурсов
• Поддержка локализации приложений
Поддержка новых платформ для разработки
• Добавлена поддержка Windows
• Добавлена поддержка macOS (частичная)
Экосистема и библиотеки
• Новая библиотека для работы с D-bus из Kotlin и поддержка популярных библиотек build-konfig, datetime, kamel, kermit, koin, ktor и sqldelight
Качество и стабильность
• Исправлены проблемы с многопоточностью
• Добавлена поддержка Unit и интеграционного тестирования. Все компоненты экосистемы Kotlin для ОС Аврора получают поддержку многоуровневого тестирования в рамках стабилизации
Референсные приложения
• Опубликовано референсное приложение StudentBox CMP
Новая версия уже доступна для разработчиков.Пробуйте прямо сейчас — все примеры и API в документации.
Хотите помочь проекту стать лучше? Присоединяйтесь к разработке на mos.hub. Мы открыты к вашему коду и экспертизе. Вместе мы сможем сделать инструмент максимально полезным для всего сообщества.
Ссылка на репозиторий
#АврораОС
@AuroraDevelopers | 6 007 |
| 12 | Протестировал новый ввод на iOS из Compose 1.11.0. Становится нативнее по поведению, но вот надо проверять на iOS смартфоне тем кто им регулярно пользуется
#Compose #iOS | 3 864 |
| 13 | ‼️ Android View всё! Да здравствует Compose!
Google официально объявила о переходе к стратегии «Compose-first» и прекращении развития Android View, переводя его в режим поддержки.
Что это значит:
👉 Классы android.widget.* в Android SDK будут находиться в режиме поддержки.
👉 Библиотеки Android Jetpack (включая RecyclerView) также переходят в режим поддержки.
👉 Все инструменты в Android Studio будут создаваться только для Compose.
👉 Документация будет писаться только для Compose, однако некоторые разделы про View останутся.
🔗 Источник - оф сайт Android Developers
#Android #AndroidDev #Compose | 4 437 |
| 14 | ⚙️ Compose Multiplatform 1.11.0 вышел
Главные фичи:
1️⃣ Нативный text input на iOS через UIView, UITextInput и UIKeyInput (экспериментально)
2️⃣ v2 API для Compose UI-тестов на не-Android таргетах
3️⃣ Переписанный с нуля скроллинг на Web
Breaking изменения, которые заденут почти всех:
👉 Минималка Kotlin поднята до 2.3.10
👉 Минимальная iOS теперь 14 (поддержка 13 ушла)
👉 iosX64 и macosX64 удалены полностью
👉 Shader на не-Android стал wrapper-классом
Я ждал нативный input на iOS с того момента, как Compose туда заехал. Текущая реализация на Skia всегда чувствовалась чужой на ощупь, особенно при сложном выделении и системных меню. Надо пробовать!
#compose #cmp #kotlin | 5 697 |
| 15 | ⚙️ Compose 1.11: Composition host defaults — мелочь, важная для KMP
В апрельском релизе Jetpack Compose под номером 1.11 в compose-runtime завезли четыре новых API: HostDefaultProvider, LocalHostDefaultProvider, HostDefaultKey и ViewTreeHostDefaultKey. Плюс билдер compositionLocalWithHostDefaultOf для авторов библиотек.
Он позволяют объявить CompositionLocal, у которого дефолтное значение резолвится из окружения хоста — например, через Android View tag'и (как это делает ViewTreeLifecycleOwner или ViewTreeOnBackPressedDispatcherOwner). Раньше для такого паттерна была обязательна зависимость на compose-ui. Теперь только compose-runtime.
Раньше чтобы из библиотеки достать значение из View tree, приходилось тянуть compose-ui ради LocalView и платформенные функции поиска по дереву View. Код жил в Android-сорсах, в commonMain такое не положишь:
// androidMain — compose-ui + Android-only API
val LocalMyOwner = compositionLocalOf<MyOwner?> { null }
@Composable
fun ProvideMyOwner(content: @Composable () -> Unit) {
val view = LocalView.current
val owner = remember(view) {
view.findViewTreeMyOwner()
}
CompositionLocalProvider(LocalMyOwner provides owner) {
content()
}
}
С новым API описание CompositionLocal живёт в commonMain и тянет только compose-runtime. Связку с View tree описывает ViewTreeHostDefaultKey, и хост сам отдаёт значение через своего провайдера:
// commonMain — только compose-runtime
val MyOwnerKey = ViewTreeHostDefaultKey<MyOwner>(
viewTagId = R.id.view_tree_my_owner
)
val LocalMyOwner = compositionLocalWithHostDefaultOf(MyOwnerKey)
// Использование — без изменений
@Composable
fun MyComponent() {
val owner = LocalMyOwner.current
// ...
}
Теперь авторы Compose библиотек могут держать определение CompositionLocal в общем модуле без зависимости на compose-ui. Профит - меньше транзитивных зависимостей в KMP-библиотеках и более чистое разделение слоёв runtime и UI.
#Compose #CMP | 5 257 |
| 16 | 👨🏻💻Разработчик сейчас не просто пишет код.
От вас ждут проектирования процессов, принятия архитектурных решений и управления сложными системами.
☝️На открытом вебинаре разберём:
✔️ как меняется роль Kotlin-разработчика
✔️ почему сегодня важно уметь работать не только с кодом, но и с бизнес-процессами и ИИ-агентами
✔️ покажем, как подходить к проектированию бизнес-логики
✔️как строить управляемые системы
✔️как использовать Kotlin для создания гибких решений.
💡Обсудим, как современные инструменты позволяют одному специалисту закрывать задачи, которые раньше требовали команды. Это практический взгляд на развитие: от исполнителя к инженеру, который влияет на продукт и архитектуру.
🗓 Открытый вебинар 20 мая в 19:00 МСК в преддверии старта курса «Проектирование и разработка Kotlin-бэкенда».
🔗 Регистрация по ссылке
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 | 0 |
| 17 | 👨🏻💻Разработчик сейчас не просто пишет код.
От вас ждут проектирования процессов, принятия архитектурных решений и управления сложными системами.
☝️На открытом вебинаре разберём:
✔️ как меняется роль Kotlin-разработчика
✔️ почему сегодня важно уметь работать не только с кодом, но и с бизнес-процессами и ИИ-агентами
✔️ покажем, как подходить к проектированию бизнес-логики
✔️как строить управляемые системы
✔️как использовать Kotlin для создания гибких решений.
💡Обсудим, как современные инструменты позволяют одному специалисту закрывать задачи, которые раньше требовали команды. Это практический взгляд на развитие: от исполнителя к инженеру, который влияет на продукт и архитектуру.
🗓 Открытый вебинар 20 мая в 19:00 МСК в преддверии старта курса «Проектирование и разработка Kotlin-бэкенда».
🔗 Регистрация по ссылке
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 | 0 |
| 18 | ⚙️ FlexBox Layout в Jetpack Compose 1.11.0 - построение динамической сетки из компонентов
В составе androidx.compose.foundation:layout 1.11.0 появился компонент FlexBox. Компоновка на основе правил CSS Flexbox. Поддерживает перенос элементов (wrap), веса (weight), выравнивание по главной и поперечной осям. Сразу вышел с поддержкой Compose Multiplatform.
FlexBox(
modifier =
Modifier.fillMaxWidth(),
config = {
flexDirection = Row
flexWrap = Wrap
justifyContent = SpaceBetween
}
) {
repeat(items.size) { index ->
Text(
text = items[index],
modifier =
Modifier.weight(1f)
)
}
}
🔗 Анонс в блоге Android Developers
🔗 API Reference
#Compose #CMP | 4 904 |
| 19 | ⚙️ splashify - библиотека для интеграции splash экрана в приложении на Compose Desktop
#Compose #Desktop | 4 158 |
| 20 | ⚙️ Новинка Compose 1.11: неленивый Grid
До сих пор для сеток у нас были только ленивые LazyVerticalGrid / LazyHorizontalGrid. Но если все элементы уже в памяти (небольшое количество) и нужен точный контроль над расположением ячеек — пригождается новый экспериментальный Grid.
// Пример
Grid(config = {
column(100.dp)
column(1.fr) // забирает остаток строки
row(50.dp)
row(80.dp)
gap(8.dp)
}) {
Box(Modifier.gridItem().fillMaxSize()) { ... }
Box(Modifier.gridItem().fillMaxSize()) { ... }
Box(Modifier.gridItem().fillMaxSize()) { ... }
Box(Modifier.gridItem().fillMaxSize()) { ... }
}
Работает на Android и KMP (iOS, Desktop, Web) – общий API
🔗 Документация по Grid
#Compose #KMP #Android #iOS #Desktop #Web #CMP | 3 971 |
