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
⚙️ Новый API `retain` в Compose: сохраняем сложные объекты при смене конфигурации

Compose 1.10 представляет новую функцию retain, которая заполняет важный пробел между существующими API управления состоянием. Теперь можно сохранять объекты между изменениями конфигурации без необходимости их сериализации!

- remember — сохраняет между рекомпозициями смена конфигурации
- rememberSavable — сохраняет между пересозданиями активити ⚠️ требует сериализации
- retain — сохраняет при смене конфигурации без сериализации не работает при убийстве процесса

@Composable
fun MediaPlayer() {
val applicationContext = LocalContext.current.applicationContext

// ExoPlayer будет сохранен при повороте экрана
val exoPlayer = retain {
ExoPlayer.Builder(applicationContext)
.setSeekBackIncrementMs(5000)
.setSeekForwardIncrementMs(5000)
.build()
}

// Воспроизведение не прервется при смене конфигурации
DisposableEffect(Unit) {
onDispose { exoPlayer.release() }
}
// ...
}


Под капотом сохранение объекта происходит через механизм ViewModel и имеет такой же цикл жизни

Фича разработана при активном участии AndroidDev-сообщества, особенно команды Circuit. Отличный пример того, как обратная связь разработчиков влияет на развитие платформы!

#Compose #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64👍148👎1
⚙️ Доступен первый RC Compose Multiplatform 1.10.0 с фиксами багов и улучшениями

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7
⚙️ Создание кастомного Toolbar в Jetpack Compose: от проблемы к решению

Разработчик из ПСБ поделился опытом создания кастомного Toolbar в Compose. Основная задача — правильное центрирование заголовка и подзаголовка при динамическом контенте слева и справа (иконки, текст переменной длины).

Решения "в лоб" не сработали:
- Row с Weight приводит к лишним рекомпозициям
- Ручной расчет ширины текста — непредсказуемо и сложно
- Проблема в разных фазах измерения Compose

Решением стал кастомный Layout. Вместо стандартных компоновок используется Layout, который измеряет все элементы за один проход.

#Compose #Android #UI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤔3👎1
⚙️ Modifier.clip() — изменение формы Composable

Когда нужен скруглённый угол, закруглённая аватарка или обрезка по кастомной форме — используйте clip(). Это не просто визуальный эффект: clip обрезает и содержимое, и границы, и все клики внутри.

// Скруглённые углы
Box(
modifier = Modifier
.size(100.dp)
.clip(RoundedCornerShape(8.dp))
.background(Color.Blue)
)

// Круглая аватарка
Image(
painter = painterResource(id = R.drawable.avatar),
contentDescription = null,
modifier = Modifier
.size(64.dp)
.clip(CircleShape)
)


Вы можете использовать не только стандартные Shape, но и реализовать свою форму:
// Звёздочка
val starShape = object : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline {
return Outline.Generic(Path().apply {
// рисуешь путь звёздочки
})
}
}

Box(
modifier = Modifier
.size(100.dp)
.clip(starShape)
.background(Color.Yellow)
)


Если в LazyColumn много элементов с clip — это не критично для производительности, но помни:
👉 clip() работает на GPU (относительно дёшево)
👉 Если в clip используется сложная форма (кастомный Path) — может работать медленнее
👉 Для списков с большим количеством элементов профилируй через Compose Layout Inspector

#Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
28👍15🤯3👎1
⚙️ Пример настройки скриншот тестирования для Compose UI с помощью Roborazzi

Я всегда скептически относился к Pixel Perfect тестированию UI, коим и являются Screenshot тесты: сложно, масштабируется так себе, да еще и настраиваешься тольк под определенные экраны.

Что вы думаете про Pixel Perfect тесты ?

#Compose #Тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👎12🤯11👍7🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 Riflesso - плагин для IDEA с показом областей кода, где происходит рекомпозиция в реальном времени. Поддерживается Android и Desktop таргеты

📃 Подробнее про реализацию плагина автор рассказал в статье (RU,30м)

#Compose #IDEA #AndroidStudio #Android #Desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥105👍76👎1
🎄 Итоги года для @compose_broadcast

Классный год для Compose. Ключевыми событиями отмечу выход Stable Compose for iOS, а также Compose 1.10, который наконец-то смог сравняться в производительности UI под Android на View в релизных сборках со всеми оптимизация.

Канал уходит на новогодние каникулы. Встретимся с вами в 2026 в @compose_broadcast и других каналах broadcast

💬 Чем для вас отметился 2025 и что ждёте в будущем году?
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉1811👎8🔥3👍2