Compose Broadcast
5.82K subscribers
342 photos
88 videos
558 links
Все о Jetpack Compose и Compose Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Android - @android_broadcast
iOS - @ios_broadcast
Kotlin - @kotlin_broadcast
Download Telegram
Forwarded from Android Broadcast
Всем кто разрабатывает под Android TV возрадуйтесь - первая Beta Jetpack Tv-Material 1.0 на Compose

#androidtv #compose #material #дизайн #jetpack #jetpackupdate
👍13👏10🎉2
Вышел Compose Multiplatform 1.6.10:
👉 Экспериментальная поддержка Lifecycle и ViewModel. Подробности тут
👉 Экспериментальная поддержка Jetpack Navigation (версия 2.7.0). Пример тут
👉 Compose ресурсы стали поддерживать многомодульные проекты и публикацию библиотек, но надо использовать Kotlin 2.0.0
👉 При миграции на Kotlin 2.0 надо использовать дополнительный Gradle плагин org.jetbrains.kotlin.plugin.compose. Руководство по миграции тут
👉 Локализовали строки в модулях ui, material и material3

Изменения в каждой платформе отдельными постами в @compose_broadcast

#compose #jetpack
🎉27👍6🏆4
Обзор того что будет релизнуто в Compose 1.7.0
👉 Shared element transitions
👉 Анимации элементов в LazyColumn и LazyRow
👉 AnnotatedString.fromHtml() - конвертирование Html в AnnotatedString
👉 ContextualFlowRow и ContextualFlowColumn - layout с композицей только видимого на экране контента, а для контента что не вместилось показываете индикатор элементов что не влезли
👉 Улучшение производительности
👉 Больше стабильного API
👉 Strong skipping mode будет включен по умолчанию в Compiler 2.0.20 и чаще будет пропускать рекомпозицию. Нужно будет ставить меньше аннотаций Stable и Immutable

Что еще
👉 Типобезопасная навигация в Navigation Compose 2.8.0
👉 Поддержка Compose в Jetpack CameraX

#compose #kotlin2 #навигация #jetpack #анимация
🔥26👍3
Стали доступны записи докладов KotlinConf'24. Доклады (10 видео) по Compose собрал в один плейлист на YouTube чтобы было удобно смотреть

#kotlinconf24 #compose #jetpack #производительность @compose_broadcast
28👍16🔥5
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
📺 Fragments in Compose (10 мин)

Видео про то как вставить Fragment в Compose с применением библиотеки fragment-compose (уже стабильная версия 1.8)

Почитать про использование Fragment в Compose можно в документации

#compose #fragment #android #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Рассказ про типобезопасную навигацию для Compose (EN,3м), какой она стала в Jetpack Navigation 2.8.0. Это всё будет работать и в Compose MP

#compose #android #jetpack #kmp
👍23🔥1
Статья от Google(EN,7м) по интеграции CameraX в Compose UI

Первая часть гайда в которой освещается настройка библиотеки и использование превью камеры. Интеграция других возможностей будет в следующих частях

#android #камера #jetpack #camerax #compose
👍23
Вышел Compose Material3 Adaptive 1.1.0

👉 ListDetailPaneScaffold и SupportingPaneScaffold добавили поддержку изменения разделителя между панелям жестом в UI и программистом из кода
👉 NavigableListDetailPaneScaffold и NavigableSupportingPaneScaffold теперь поддерживают predictive back. Также можно использовать ThreePaneScaffoldPredictiveBackHandler для поддержки predictive back с вашей собственной реализацией scaffold
👉 AnimatedPane теперь позволит задать разные движения для переключения панелей

#compose #jetpack
👍16
⚙️ Вышел Jetpack Compose 1.8.0 RC2 с исправлениями ошибок

// Подключайте BOM для обновления до актуальных версиях
implementation("androidx.compose:compose-bom-beta:2025.03.01")


#compose #jetpack #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Forwarded from Android Broadcast
🚀 Релиз Jetpack Navigation 2.9.0

🛠 Значительные переработки под капотом для улучшения поддержки KMP
👉 Добавлена поддержка обработки deep link из Kotlin Common кода
👉 Улучшения API

#jetpack #jetpackupdate #navigation #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
В Compose 1.9.0 (пока в альфа) добавили новый Modifier - keepScreenOn(), который будет держать экран включенным, пока Composable функция будет частью композиции

Box(
modifier = Modifier.keepScreenOn()
){
...
}


#jetpack
71👍50🔥2
Forwarded from Android Broadcast
🎉 Jetpack Navigation 3 - навигация для Compose, написанная с нуля!

Будем честны Jetpack Navigation for Compose было никаким решением, до того как в ней появилась типобезопасная навигация, но и тогда остается много вопросов. Google решила что пора написать настоящую навигацию для Compose. Знакомьтесь - Jetpack Nav 3

Ключевые идеи в новой библиотеки: декларативное объявление + "навигация как состояние". Это полностью повторяет идеи что я заложил в NavState. Все это вылилось в принципы:
👉 Разработчик управляет back stack
👉 Возможность расширения и реализации собственной навигации на базовых компонентах
👉 Анимации из коробки
👉 Поддержка Predictive Back
👉 Поддержка адаптивных layout
👉 Сохранения состояния каждого элемент back stack, включая ViewModel
👉 Поддержка многомодульности

Пока представлена только первая альфа и библиотеки еще предстоит путь, как минимум обзавестись поддержкой KMP

🔗 Больше подробности в документации
🐱 Примеры использования на GitHub

#jetpack #compose #навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥43👍91
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
📹 Разбор Jetpack Navigation 3 - настоящая навигация для Compose (21 мин)

Месяц назад Google анонсировала навигацию специально разработанную под Compose и которая должна решить все боли. В видео показываю её возможности, делюсь своим мнение и рассказываю про недочеты, которые надеюсь что решат до стабильного релиза

#AndroidBroadcast #navigation #jetpack #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍333🤔2
‼️ Опубликовали первую сборку Navigation3 для Compose Multiplatfom

Подкючайте артефакт org.jetbrains.androidx.navigation3:navigation3-ui:1.0.0-alpha01 в common код и можете пробовать

Ждем актуализации до свежей альфа версии, а также адаптивные layout и интеграцию с ViewModel

#compose #kmp #naviation #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥4🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Примеры использования Jetpack Navigation3 для Compose Multiplatform от Кости Цховребова (сотрудник JB) появились на GitHub. Репозиторий является форком примеров от Google

Решение использует dev сборки Jetpack Navigation 3 для Compose Multiplatform

#compose #jetpack #navigation3 #cmp #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥47👍93
👍24
⚙️ Navigation3 Browser — навигация для Web на основе Jetpack Navigation 3

Появилась реализация навигации под Web-браузер, совместимая с Jetpack Navigation 3 и интегрированная с нативной историей браузера. Автор — Костя Цховребов из JetBrains (KMP-команда).

Теперь Web-приложения на Compose Multiplatform могут работать с привычным поведением браузера: кнопки Back/Forward, корректное управление историей, восстановление состояния и предсказуемая работа нескольких экранов.

Поддерживаются две стратегии навигации:
👉 Chronological - Классическая браузерная модель: линейный переход по посещённым состояниям (Back/Forward).
👉 Hierarchical - Мобильная модель навигации, имитирующая структуру экранов и вложенную иерархию — аналогично Android-приложениям.

🧪 Обе стратегии можно сравнить в онлайн-демо

Пример использования Chronological-навигации

@Composable
fun App() {
val backStack = remember { mutableStateListOf<Any>(Root) }

ChronologicalBrowserNavigation(
backStack = backStack,
saveKey = { key ->
when (key) {
is Root -> buildBrowserHistoryFragment("root")
is Profile -> buildBrowserHistoryFragment(
"profile",
mapOf("id" to key.id.toString())
)
else -> null
}
},
restoreKey = { fragment ->
when (getBrowserHistoryFragmentName(fragment)) {
"root" -> Root
"profile" -> Profile(
getBrowserHistoryFragmentParameters(fragment)
.getValue("id")
?.toInt() ?: error("id is required")
)
else -> null
}
}
)

NavDisplay(backStack) { /* ... */ }
}


Navigation3 Browser кажется важным шагом для формирования единой модели навигации в Compose Multiplatform: Android → Desktop → Web.
Это упростит мультиплатформенную архитектуру и сделает перенос логики между платформами гораздо чище.

#Kotlin #Compose #KMP #CMP #WEB #AndroidJetpack #Jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍11🔥3🤔3
🔥 Remote Compose — новый взгляд на Server-Driven UI в Jetpack Compose

В AndroidX Jetpack появилась новая экспериментальная библиотека androidx.compose.remote (пока еще даже на dev версия). Она предлагает совершенно другой подход к динамическим интерфейсам и может радикально изменить то, как мы обновляем UI в продакшене, категорически отличающаяся от текущих BDUI/SDUI решений.

Remote Compose позволяет создавать и рендерить интерфейсы Jetpack Compose удалённо, без пересборки и релиза приложения.
UI генерируется на сервере, сериализуется в компактный бинарный документ и воспроизводится на устройстве.

Remote Compose открывает возможности, которые раньше требовали релиза приложения:
⚡️ Мгновенные A/B-тесты — вариации интерфейса меняются на сервере, без обновлений.
🎨 Обновление дизайна в реальном времени — карточки товаров, баннеры, сезонные темы.
📰 Динамические контентные экраны — новости, акции, спецпроекты, которые появляются мгновенно.
🧪 Фичи без мусора — нет необходимости тянуть все варианты экрана в бинарник.

Архитектура Remote Compose состоит из двух частей:

1️⃣ Создание документа

На сервере вы пишете обычные composable-функции — либо используете специальные Remote* элементы (RemoteColumn, RemoteText и др.).

Библиотека перехватывает draw-операции Compose и превращает UI в бинарный документ. Получается самодостаточный «UI-файл», который можно отправить на клиент.

2️⃣ Воспроизведение документа

На устройстве этот документ «проигрывается» плеером:
👉 есть Compose-плеер — для современных приложений;
👉 есть Android View-плеер — для старых архитектур.

Плеер интерпретирует более 90 низкоуровневых операций (рисование, layout, модификаторы, state), обеспечивая реальную нативную отрисовку, без WebView и без компонентов, которые нужно заранее описывать в приложении.

Почему это лучше JSON или WebView
JSON-подход требует схем, ограничивает сложные эффекты, анимации и кастомные компоненты.
WebView — это отдельный процесс, разная визуальная стилистика, тяжёлое потребление памяти и уязвимости

Remote Compose передаёт не структуру компонентов, а реальные команды рисования. Поэтому любое, самое сложное Compose-UI — будет воспроизведено точно так, как вы его задали.

Базовые принципы Remote Compose
👉 Документность — UI становится бинарным документом, который можно кешировать, версионировать, отправлять по сети.
👉 Платформенная независимость — один документ можно рендерить на телефоне, планшете, складном устройстве и даже часах.
👉 Отделение визуального уровня от логики — клиенту не нужно знать о ваших composable-функциях, ViewModel, DI и т.п.
👉 Двусторонняя связь — клики и события возвращаются на клиент, который решает, что делать (навигировать, логировать, изменять состояние).
👉 Поддержка анимаций и выражений — значения могут вычисляться по времени, переменным, условиям.

Для большинства приложений оптимальная модель — гибридная:
📱 основная навигация + критические экраны в “локальном Compose”,
⚙️ динамические зоны — через Remote Compose.

Если Remote Compose будет развиваться так же активно, как Compose в своё время, это может стать стандартом для динамических интерфейсов на Android. Как вам такой поворот с Compose?

Источник тут

#jetpack #android #compose #serverdrivenui #sdui #bdui
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥96🤯4018👍3🤔3
⚙️ Пример использования Jetpack Compose Remote

// Пример создания документа на севере
val document = captureRemoteDocument(
context = context,
creationDisplayInfo = displayInfo,
profile = profile
) {
RemoteColumn(modifier = RemoteModifier.fillMaxSize()) {
RemoteText("Dynamic Content")
RemoteButton(onClick = { /* action */ }) {
RemoteText("Click Me")
}
}
}


// Пример воспроизведения документа на клиенте
@Composable
fun DynamicScreen(document: CoreDocument) {
RemoteDocumentPlayer(
document = document,
documentWidth = screenWidth,
documentHeight = screenHeight,
modifier = Modifier.fillMaxSize(),
onNamedAction = { name, value, stateUpdater ->
// Обработка именнового действия из документа
when (name) {
"addToCart" -> cartManager.addItem(value)
"navigate" -> navController.navigate(value)
"trackEvent" -> analytics.logEvent(value)
}
},
bitmapLoader = rememberBitmapLoader() // Для загрузки картинок
)
}


Источник тут

#jetpack #android #compose #serverdrivenui #sdui #bdui
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯32👍8🔥2🤔1