🔥⚙️ Compose iOS теперь Stable
Самый громкий и важный анонс в истории Compose Multiplatform с выходом версии 1.8.0
Что именно готово для продакшен применения
👉 Все основные фичи из Jetpack Compose работают на iOS
👉 Типобезопасная навигация с поддержкой deep link
👉 Гибкое управление ресурсами
👉 Поддержка iOS Accessibility API
👉 Ощущения от UI приложения как нативного (скрол, редактирование текста, drag-and-drop, адаптивный UI, навигация жестами и пр)
👉 Производительность UI на Compose близка к SwiftUI, но пока немного уступает
Новая эра мобильной разработки уже тут!
#compose #ios
Самый громкий и важный анонс в истории Compose Multiplatform с выходом версии 1.8.0
Что именно готово для продакшен применения
👉 Все основные фичи из Jetpack Compose работают на iOS
👉 Типобезопасная навигация с поддержкой deep link
👉 Гибкое управление ресурсами
👉 Поддержка iOS Accessibility API
👉 Ощущения от UI приложения как нативного (скрол, редактирование текста, drag-and-drop, адаптивный UI, навигация жестами и пр)
👉 Производительность UI на Compose близка к SwiftUI, но пока немного уступает
Новая эра мобильной разработки уже тут!
#compose #ios
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
🛠 Значительные переработки под капотом для улучшения поддержки KMP
👉 Добавлена поддержка обработки deep link из Kotlin Common кода
👉 Улучшения API
#jetpack #jetpackupdate #navigation #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
Обновляем BOM файл
implementation(platform("androidx.compose:compose-bom:2025.05.00"))#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Обновляем BOM файл
implementation(platform("androidx.compose:compose-bom-alpha:2025.05.00"))#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Автор статьи написал простое DSL для упрощения работы с пагинацией через JetPack Paging3, вместо решения в лоб от Google. Исходны код на
@Composable
fun ArticlesPage(
articles: LazyPagingItems<Article>,
onAction: (NewsListAction) -> Unit,
) {
val newsListState = rememberLazyListState()
HandlePagingItems(articles) {
onRefresh { CircularProgressIndicator() }
onEmpty { // UI for empty list }
onError { error -> // UI for error }
onSuccess { items ->
LazyColumn(newsListState) {
onPagingItems(key = { it.id }) { article -> // UI for article }
onAppendItem { CircularProgressIndicator(Modifier.padding(6.dp)) }
onLastItem { // UI for end of the list }
}
}
}
}
#compose #dsl
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
compose-table - Compose Multiplatform библиотека с поддержкой Android, iOS, JVM Desktop, WASM для показа таблиц
Можно попробовать онлайн версию
#compose #android #ios #jvm #desktop #wasm
Можно попробовать онлайн версию
#compose #android #ios #jvm #desktop #wasm
В Compose 1.9.0 (пока в альфа) добавили новый Modifier - keepScreenOn(), который будет держать экран включенным, пока Composable функция будет частью композиции
#jetpack
Box(
modifier = Modifier.keepScreenOn()
){
...
}
#jetpack
Писали ли свой layout в Compose?
Anonymous Poll
39%
Да
52%
Нет
3%
Не знаю Compose
0%
Не пишу код
1%
Другой вариант
5%
Не участвую в опросе
This media is not supported in your browser
VIEW IN TELEGRAM
💠 Вышел Haze 1.6.0 - блюр в стиле glassmorphism для Compose Multiplatform
Что нового:
🤖 Размытие теперь работает на всех версиях Android
🎨 Поддержка размытия переднего плана (контента)
📐 Обработка размытых краёв
#compose
Что нового:
🎨 Поддержка размытия переднего плана (контента)
📐 Обработка размытых краёв
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Что нового
⬆️ Обновление Kotlin, Compose, Okio, Skiko, Coroutines и др зависимостей до актуальных версий
🛠 Исправление багов
👉 Compose артефакты требуют Java 11 и выше из-за перехода на Compose 1.8.0
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Какое из утверждений о Stable типах в Jetpack Compose верно?
Anonymous Quiz
2%
Stable типы всегда пересоздаются при recomposition.
10%
Stable типы не гарантируют отсутствие побочных эффектов в функции composable.
78%
Stable типы помогают снизить количество ненужных recomposition.
5%
Любой data class в Kotlin автоматически считается Stable типом в Compose
6%
Не участвую
Выберите класс, который будет признан Stable типом в Jetpack Compose:
Anonymous Quiz
3%
data class A(val numbers: List<Int>)
73%
data class B(val name: String, val age: Int)
10%
data class C(var id: Int)
10%
data class D(val callback: () -> Unit)
3%
Не участвую
Какое из следующих утверждений о Stable и Immutable типах в Jetpack Compose верно?
Anonymous Quiz
8%
Immutable типы могут менять своё внутреннее состояние после создания.
28%
Stable типы гарантируют, что их содержимое никогда не изменяется.
4%
Любой data class автоматически считается Immutable в Compose.
61%
Все Immutable типы также считаются Stable типами.
Свойства должны быть только для чтения (val). var допускается, если гарантируется стабильное поведение при изменениях.
Все поля должны быть либо примитивами (Int, String, Boolean и т.д.), либо тоже Stable.
Лямбда сама по себе считается Stable типом, но важно что захватывает лямбда в теле и это может приводить к рекомпозиции
Переопределённые методы могут сделать тип не Stable.
Проще говоря тип считается Stable, если:
👉 Его данные не изменяются неожиданно,
👉 Он не содержит ссылок на нестабильные объекты,
👉 Все его поля либо примитивные, либо Stable-типы.
Подробнее в документации
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Immutable — это объект, который невозможно изменить после создания, и его поля тоже нельзя изменить (не берем в расчет способы через рефлексию)
Каждый property должен быть либо примитивом (Int, String и т.д.), либо другим Immutable типом.
В идеале — final класс.
// Пример
@Immutable
data class User(val id: Int, val name: String)
Подробнее в документации
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
@Immutable
👉 Используйте, если ваш класс полностью неизменяемый после создания (все поля val, только immutable-типы).
👉 Это даёт максимальную оптимизацию recomposition — Compose уверен, что объект не поменяется неожиданно.
@Stable
👉 Используйте, если класс допускает изменения, но эти изменения происходят предсказуемо, и вы гарантируете корректную работу с recomposition.
👉 Полезно для сложных классов, коллекций или собственных типов состояния.
Для типов из библиотек можно указать их стабильность через файл конфигурации в Gradle скрипте:
// Указание типа как Stable
java.time.LocalDateTime
// НЕ СТОИТ ТАК ДЕЛАТЬ Указание всех типов в пакете как Stable
com.datalayer.*
// НЕ СТОИТ ТАК ДЕЛАТЬ Указание всех типов в пакете и подпакетах как Stable
com.datalayer.**
Подробнее в документации
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Strong Skipping Mode — это режим, при котором Compose точно отслеживает изменения параметров composable-функций и пропускает рекомпозицию, если параметры не изменились и считаются Stable.
Как работает режим компилятора
👉 Если параметры функции Stable и равны предыдущим значениям (через Object.equals()), Compose пропускает рекомпозицию этого composable.
👉 Для Unstable типов происходит сравнение через проверку ссылки (вызов === в Kotlin), что минимизировать кол-во рекомпозиций
👉 Даже лямбды
(() -> Unit) считаются Stable, но если они захватывают нестабильные объекты, Compose не сможет пропустить рекомпозицию, потому что захваченные значения могут измениться.👉 При выключенном Strong Skipping режиме Compose реже пропускает рекомпозицию, даже если параметры формально Stable.
Почему это важно?
👉 Strong Skipping помогает избегать ненужных перерисовок и увеличивает производительность UI.
👉 Если вы передаёте в composable нестабильные параметры, skipping работать не будет — функция будет вызываться чаще.
Ключевые моменты:
👉 Лямбды по умолчанию Stable, но их захватываемые значения могут ломать skipping.
👉 Параметры типа SnapshotStateList, SnapshotStateMap, MutableState считаются Stable.
👉 Strong Skipping Mode по умолчанию включён с Kotlin 2.0.20, и его рекомендуется не отключать для современных проектов.
#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM