Composable Preview Scanner - библиотека для автоматической генерации кода скриншот тестов из Composable Preview на основе популярных библиотек: Paparazzi, Roborazzi, Shot, Dropshots, Android-Testify и др.
По заявление автора, обладает большими возможностями чем Showkase и Compose Preview Screenshot Testing (находится в разработке)
#compose #тестирование
По заявление автора, обладает большими возможностями чем Showkase и Compose Preview Screenshot Testing (находится в разработке)
#compose #тестирование
Как на Compose сделать (EN, 4м) красивый Edge-toEdge UI на всех версиях Android - используйте правильную настройку Activity и применяйте Modifier.windowInsetsPadding(WindowInsets.systemBars)
#compose #android #edgetoedge
#compose #android #edgetoedge
Composition Local - удобный механизм Compose, позволяющий передать значения всем вложенным Composable функциями и переопределять его. Если еще не успел с ним познакомиться - читайте статью (EN,10м) и официальную документацию
#compose
#compose
Forwarded from Why Android? 🌚
This media is not supported in your browser
VIEW IN TELEGRAM
Начиная с IntelliJ IDEA 2025.1 EAP можно запускать адекватное Compose Preview прямо из commonMain и без всяких костылей 🌚
youtrack
youtrack
На сайте JetBrains появилась страница с описанием различий между Compose Multiplatform от JetBrains и Jetpack Compose от Google.
Ключевые различия:
👉 Jetpack Compose фокусируется на Android, и не все компоненты доступны из общего (Kotlin common) кода в Compose Multiplatform.
👉 Compose Multiplatform включает множество платформенно-специфичных API: Desktop, Web, iOS. Эти API недоступны из общего кода.
👉 Некоторые библиотеки для Compose публикуются JetBrains с отдельными пакетами, чтобы добавить поддержку Compose Multiplatform.
Этот момент не упомянут в статье, но важным различием являются инструменты для разработки: для Compose Multiplatform они пока находятся на более ранней стадии и уступают Jetpack Compose.
#compose #cmp
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Очень подробный гайд по тому, как оптимизировать производительность приложения через использование стабильных типов для меньшего числа рекомпозиций.
Разбираются:
👉 Что такое Stable тип
👉 Как происходит рекомпозиция
👉 Restartable и Skippable Composable функции
👉 Compose Compiler Metrics
👉 Аннотации Immutable и Stable
👉 Аннотация NonRestartableComposable
👉 Как стабилизировать Composable функции
👉 Strong Skipping Mode
#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел Haze 1.3.0 - библиотека для размытия в стиле glassmorphism для Compose MP
Что нового:
👉 Добавлен эффект радиального прогрессивного размытие
👉 Поддержка Brush в tint
👉 Больше примеров использования
#compose #kmp
Что нового:
👉 Добавлен эффект радиального прогрессивного размытие
👉 Поддержка Brush в tint
👉 Больше примеров использования
#compose #kmp
GitHub
Release 1.3.0 · chrisbanes/haze
What's Changed
Add Brush support to HazeTint by @chrisbanes in #481
Move all samples to shared by @chrisbanes in #484
Add Bottom Sheet sample by @chrisbanes in #485
Fix alpha property changes ...
Add Brush support to HazeTint by @chrisbanes in #481
Move all samples to shared by @chrisbanes in #484
Add Bottom Sheet sample by @chrisbanes in #485
Fix alpha property changes ...
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда использовать?
✅ Функция является обёрткой над другой Composable функцией
✅ Если метод не зависит от состояния и всегда ведёт себя одинаково.
✅ Когда нужно оптимизировать производительность и уменьшить лишние перестроения.
✅ В случаях, когда внутри создаётся сложный объект, который не должен пересоздаваться
// Пример функции из Jetpack Material 3
@NonRestartableComposable
@Composable
fun Icon(
painter: Painter,
contentDescription: String?,
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current,
contentScale: ContentScale = ContentScale.Fit
) {
Image(painter = painter, contentDescription = contentDescription, modifier = modifier, colorFilter = tint.asColorFilter())
}
Аннотацию надо использовать разумно и не стоит использовать, если…
❌ Функция зависит от состояния (включая CompositonLocal)
// НЕ НАДО @NonRestartableComposable
@Composable
fun Timer() {
var time by remember { mutableStateOf(0) }
LaunchedEffect(Unit) {
while (true) {
delay(1000)
time++
}
}
Text("Time: $time")
}
#composable #оптимизации
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Compose превью помогают быстро проверять компоненты во время разработки, а с помощью Gradle-плагина для тестирования скриншотов превью можно автоматизировать визуальные регрессионные тесты. Для тестирования поведения теперь доступен новый API – DeviceConfigurationOverride, который позволяет эмулировать различные конфигурации устройств без необходимости запускать несколько эмуляторов для полного набора тестов.
#compose #androidstudio #инструменты #android
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример миграции в Compose с Modifier.pullToRefresh на PullToRefreshBox из Material3
#compose #android
#compose #android
Media is too big
VIEW IN TELEGRAM
Decomposer - приложения для десктопа, чтоб изучать внутренности Jetpack Compose. Позволяет
👉 Смотреть IR структуру вашего приложения
👉 Смотреть структуру композиции вашего приложения
Подробности использования в статье(EN,11м) и ссылка без VPN
#compose #инструменты
👉 Смотреть IR структуру вашего приложения
👉 Смотреть структуру композиции вашего приложения
Подробности использования в статье(EN,11м) и ссылка без VPN
#compose #инструменты
Why Not Compose! - репозиторий-сборник с примерами реализаций анимаций, композици и UI на Jetpack Compose
#android #compose #анимация
#android #compose #анимация
Обзор основных компонентов библиотеки Decompose, демонстрация на примере простого приложения как можно использовать разные её компоненты и возможности.
#compose #kmp #decompose
Please open Telegram to view this post
VIEW IN TELEGRAM
Decompose от Аркадия Иванова (его блог @arkivanov_logs) - однозначно, это классное решение, но оно не про навигацию, а фреймворк по разработки приложений на компонентном подходе на основе KMP
Сам автор это и пишет в первой строке описания:
Сравнивать его с Jetpack Navigation и другими навигационными библиотеками не будет корректно, так как решение Google только про навигацию! Если у вас уже есть готовое приложения, то для интеграции Decompose вам скорее всего придется внести изменения, а вот интегрировать библиотеку только для навигации будет скорее всего проще
Сам автор это и пишет в первой строке описания:
Decompose is a Kotlin Multiplatform library for breaking down your code into tree-structured lifecycle-aware business logic components (aka BLoC), with routing functionality and pluggable UI
Сравнивать его с Jetpack Navigation и другими навигационными библиотеками не будет корректно, так как решение Google только про навигацию! Если у вас уже есть готовое приложения, то для интеграции Decompose вам скорее всего придется внести изменения, а вот интегрировать библиотеку только для навигации будет скорее всего проще
Для решения задачи берется PNG маски, Modifier.drawWithContent() и BlendMode
🔗 Ссылка без VPN
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Kelp - плагин для Android Studio, который улучшает интеграцию собственной дизайн системы на Jetpack Compose.
Что умеет плагин:
👉 Задать иконки для Composable функции в автокомплите
👉 Превью иконок в автодополнении
👉 Превью цветов из дизайн систем
👉 Генерация превью Composable функций в KDOC
👉 Создание live templates
Вся настройка происходит через сохранение json файла, а также есть Gradle плагин
#compose #androidstudio
Что умеет плагин:
👉 Задать иконки для Composable функции в автокомплите
👉 Превью иконок в автодополнении
👉 Превью цветов из дизайн систем
👉 Генерация превью Composable функций в KDOC
👉 Создание live templates
Вся настройка происходит через сохранение json файла, а также есть Gradle плагин
#compose #androidstudio