Media is too big
VIEW IN TELEGRAM
🤔50🤯12👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥46🤔12❤2👍1
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
Месяц назад Google анонсировала навигацию специально разработанную под Compose и которая должна решить все боли. В видео показываю её возможности, делюсь своим мнение и рассказываю про недочеты, которые надеюсь что решат до стабильного релиза
#AndroidBroadcast #navigation #jetpack #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32❤3🤔2
Ждем скорого стабильного релиза и можно будет разбирать
#compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
В Compose 1.9.0 появляется новое внутреннее API - PausableComposition. Оно позволит:
👉 Инкрементальная рекомпозиция: Подготовка UI, разбивая работу на части
👉 Прогрев UI: Делать подготовку UI асинхронно, до того как она кажется на экране
Обещают хорошее улучшение для LazyColumn и LazyRow
#compose #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥57👍13❤5🤔1
Forwarded from Kotlin Adept Notes (Alex Panov)
Преимущества библиотеки:
#Compose #Snackbar #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53👍15❤4🤯3
Обновляем BOM файл для тех кто не боится Beta
dependencies {
implementation(platform("androidx.compose:compose-bom-beta:2025.07.01")
}
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14
В репозитории Compose ведутся работы над тем, чтобы добавить API retain {}, которое в отличие от remember будет запоминать данные дольше (между входами и выходами в композиции, подобно как сохранение через ViewModel)
val user = retain { someData() }
@Composable
public inline fun <reified T> retain(
noinline calculation: @DisallowComposableCalls () -> T
): T
Больше подробностей в 📃 статье (EN,6м). Также доступна по 🔗 альтернативной ссылке
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯70👍15🔥5👏2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🤯13🤔7
This media is not supported in your browser
VIEW IN TELEGRAM
Причина - куча багов, которые не получалось решить, а также на Compose писать проще.
По итогу реализовали свой Layout, чтобы сделать иерархию плоской и было меньше рекомпозиций.
@Composable
fun FastPaymentButton(
fastPaymentState: FastPaymentState,
modifier: Modifier = Modifier,
thumbContent: @Composable BoxScope.() -> Unit = {},
background: @Composable () -> Unit = DefaultFastPaymentButtonBackground,
// Параметры будут добавляться по мере обогащения слайдера фичами
onClick: () -> Unit = {},
onSwiped: () -> Unit = {},
) {
// Content
}
#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍11
Composable функция чем-то схожа с тем как работает suspend функция, только указывается особенность не через ключевое слово языка, а аннотацию из библиотеки. При компиляции кода происходит трансформация объявленной функции в код, который будет способен отобразить что-то на экране и обновляться. Удивительный мир магии плагина компилятора.
После пребразования получаются разные Node, узлы где есть вызовы Composable функций, выстроенные в иерархию. Подробнее в статье⚙️ Что делается с Composable функцией, чтобы она работала в приложении (EN,5м) или по альтернативной ссылке
#compose
После пребразования получаются разные Node, узлы где есть вызовы Composable функций, выстроенные в иерархию. Подробнее в статье
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
LayoutNode: What Actually Happens When You Write @Composable
Featured in Kotlin Weekly Issue #471, jetc.dev Newsletter Issue #277
👍33❤4
В следующей версии Jetpack Lifecycle добавили новую функцию, которая позволяет переопределить LifecycleOwner и задать максимальное состояние:
@Composable
fun LifecycleOwner(
maxLifecycle: State = RESUMED,
parentLifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
content: @Composable () -> Unit,
)
💡 Зачем это нужно?
Идея пришла из поддержки адаптивного UI в Jetpack Navigation 3. Теперь можно строить интерфейсы, которые одинаково хорошо работают и на смартфонах, и на больших экранах.
📌 Пример: многопанельный UI, где одна панель отображается, а вторая — скрыта, потому что не влезла на экран. Логично, что их Lifecycle будет разным. Но раньше стандартный LifecycleOwner был жёстко привязан к Activity или Fragment, без учета реальной видимости конкретного UI-компонента.
А вы уже видите, где можно применить эту фичу в своем проекте? Делитесь идеями в комментариях 👇
#compose #adaptive #ui
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔28🔥9
Вышла следующая стабильная версия UI фреймворка для Android. Что нового:
👉 Появилась модификаторы для работы с тенями Modifier.dropShadow() и Modifier.innerShadow(). Уже существующий Modifier.shadow() рисует тень за объектом, а новые модификаторы добавят тень внутри.
👉 Более производительный способ отслеживать положения элементов на экране с помощью Modifier.onLayoutRectChanged()
👉 Добавили поддержку скролла в двух направлениях сразу (например как скролл карты или фото). Используйте Draggable2D и Scrollable2D API
👉 Улучшили работу скролла скролл при использованием VIew с Compose
👉 Добавили опцию для включения большего количества информации при анализе крешей в Compose
class App : Application() {
override fun onCreate() {
Composer.setDiagnosticStackTraceEnabled(BuildConfig.DEBUG)
}
}
👉 Аннотации
@Stable
, @Immutable
и @StableMarker
выделили в отдельный артефакт runtime-annotation
, чтобы можно было использовать их в модулях без Compose👉 Новые аннотации @RememberInComposition и @FrequentlyChangingValue (подробнее в отдельном посте)
Много улучшений в LazyLayout
👉 Стабилизация API для создания собственных Lazy компонентов
👉 Значительное ускорение производительности скролла Lazy List и Lazy Grid благодаря механизму предзагрузки (prefetch). Надо использовать LazyLayoutCacheWindow
@Composable
private fun LazyColumnCacheWindowDemo() {
val dpCacheWindow = LazyLayoutCacheWindow(ahead = 150.dp, behind = 100.dp)
val state = rememberLazyListState(cacheWindow = dpCacheWindow)
LazyColumn(state = state) {
items(count) { Text(text = "$it", fontSize = 80.sp) }
}
}
Конечно же новая версия Compose - это повышение скорости работы и исправление багов для более плавного UI
Обновляем BOM файл в зависимостях вашего проекта для получения свежей версии:
// build.gradle.kts
dependencies {
implementation(platform("androidx.compose:compose-bom:2025.08.00"))
}
#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54❤6👍2
В Compose 1.9 появились новые аннотации на основе которых будут работать Android Lint проверки:
📝 Когда использовать:
- Если API возвращает состояние или изменяемый объект, который нужно переиспользовать между composition.
- Если возвращается объект, чья идентичность важна (например, ключ для другой API).
- Если создание объекта дорого по ресурсам и нужно кешировать.
📝 Как избежать лишних перерисовок:
- Используйте derivedStateOf — фильтруйте изменения состояния, реагируя только на нужные.
- Используйте snapshotFlow + LaunchedEffect — работайте с изменениями без рекомпозиции.
- В UI-компонентах читайте значение на стадии measure / layout / draw, чтобы вызывать только инвалидацию нужной фазы, а не всю рекомпозицию.
- Делайте анализ работы вашего кода, например через Layout Inspector
Всем рекомендую озаботится аннотированием общего API Compose кода ваших проектов и регулярно запускать Android Lint, чтобы предотвратить ошибки, негативно влияющие на скорость работы UI
#compose #ui #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35❤6
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🔥9
Jetpack Navigation3 - это новая библиотека Google для навигации, построенная специально для Compose, построенная вокруг состояния стека
Подробности в issue, а исходники на
#compose #multiplatform
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44🤔2
🔥 Jetpack Navigation 3 теперь мультиплатформенная!
В релизе 1.0.0-alpha08 добавили поддержку множества новых KMP-таргетов для runtime-артефакта. Теперь библиотека работает на:
👉 JVM → Android и Desktop
👉 Native → Linux, iOS, watchOS, macOS, MinGW
👉 Web → JavaScript и WasmJS
Для UI-артефакта (где лежат Composable-функции) пока поддержка осталась только у Jetpack Compose.
Ждём появления отдельного артефакта для⚙️ Compose Multiplatform от JetBrains
#compose #kmp #navigation
В релизе 1.0.0-alpha08 добавили поддержку множества новых KMP-таргетов для runtime-артефакта. Теперь библиотека работает на:
👉 JVM → Android и Desktop
👉 Native → Linux, iOS, watchOS, macOS, MinGW
👉 Web → JavaScript и WasmJS
Для UI-артефакта (где лежат Composable-функции) пока поддержка осталась только у Jetpack Compose.
Ждём появления отдельного артефакта для
#compose #kmp #navigation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥46👍8🤔5❤1
В Compose 1.9.0 добавили больше возможностей управления тенями и их типами.
Modifier
.size(300.dp)
.background(Red300)
.innerShadow(
shape = RectangleShape
block = {
radius = 50f
}
)
.dropShadow(
shape = RectangleShape
block = {
radius = 50f
}
)
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39❤1