Что нового для всех таргетов:
👉 Аннотация
@Preview
в common коде теперь поддерживает задание параметров (имя для отображения, размеры и прочее)👉 Больше возможностей по управлению тенями
👉 Адаптировали новое API для управления контекстным меню из Android под все платформы. Требуется включение через код
ComposeFoundationFlags.isNewContextMenuEnabled = true
👉 Тема Material Expressive
👉 Артефакт
androidx.compose.runtime:runtime
стал мультиплатформенным, перенеся наработки из org.jetbrains.compose.runtime:runtime
👉
runComposeUiTest()
теперь позволяет запускать suspend функции в теле вызоваCompose/iOS
👉 Управление желаемой частотой кадров для рендера Composable
Modifier.preferredFrameRate(FrameRateCategory.High)
Modifier.preferredFrameRate(120f)
👉 Поддержка кастомизаций ввода, специфичных для iOS
BasicTextField(
value = "",
onValueChange = {},
keyboardOptions = KeyboardOptions(
platformImeOptions = PlatformImeOptions {
keyboardType(UIKeyboardTypeEmailAddress)
}
)
)
Compose/Web
🎉 Поддержка Web таргета перешло в Beta статус
👉 Поддержка Accessibility API
👉 Новое API для встраивания HTML
private val ttOSM =
"https://www.openstreetmap.org/export/embed.html?bbox=4.890965223312379%2C52.33722052818563%2C4.893990755081177%2C52.33860862450587&layer=mapnik"
@Composable
fun Map() {
Box(
modifier = Modifier.fillMaxWidth().fillMaxHeight()
) {
WebElementView(
factory = {
(document.createElement("iframe")
as HTMLIFrameElement)
.apply { src = ttOSM }
},
modifier = Modifier.fillMaxSize(),
update = { iframe -> iframe.src = iframe.src }
)
}
}
👉 Упростили связывание Jetpack Navigation c навигацией в браузере
// Код в Composable функции
LaunchedEffect(Unit) {
// Implicitly accesses the window object
navController.bindToBrowserNavigation()
}
Compose/Desktop
👉 Возможность настройки окна с контентом с помощью API SwingFrame() and SwingDialog(), аналогичные Window() and DialogWindow(). Разница то что новые API конфигурируются в init блоке до показа UI.
#compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥29❤3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Как была сделана реализация написали в статье, а исходники есть на GitHub
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥85❤8
Обновляйте зависимости или сразу всё через BOM файл:
```kotlin
dependencies {
implementation(platform("androidx.compose:compose-bom:2025.09.01"))
}
```
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Media is too big
VIEW IN TELEGRAM
Что нового:
👉 Зависимость material-icons-core теперь не добавляется транзитивно и нужно явно её добавлять
👉 Для описания хореографии и анимации Material 3 компоненты теперь используют MotionScheme API
👉 Компонент HorizontalCenteredHeroCarousel - горизонтальная карусель с паралаксом (спека тут)
👉 Компонент VerticalDragHandle - перетягиваемый разделитель экрана для контента на большом экране
👉 SecureTextField - поле ввода для паролей с защитой вводимых данных
👉 Поддержка автоматического размера текста в Text полях
👉 Добавили Material 3 декораторы для BasicTextField2
👉 Добавлено API TimePickerDialog
👉 Обновили API SearchBar
🛠 Исправление багов
🚀 Повышение производительности
#compose #material3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36❤5👍5
Автор статьи решил сделать визуализацию графа навигации между Composable функциями. Для этого был написан плагин Kotlin компилятора, который анализирует Kotlin код, генерирует диаграмму в формате Mermaid, которые после можно открыть с помощью плагина для IDEA. Результат на картинке к посту. Конечно, результат для Jetpack Navigation в Android Studio выглядит лучше, но уже неплохо.
🔗 Альтернативная ссылка
#compose #ksp #навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍11
В Compose 1.9 прокачали API для определения видимости Composable на экране. Например, это может быть полезно в скролящихся списках.
LazyColumn {
items(feedData) { video ->
VideoRow(
video,
Modifier.onVisibilityChanged(
// задержка вызова callback
minDurationMs = 500,
// какая часть компонента должна
// быть в области видимости
minFractionVisible = 1f,
// Зона для определения видимости компонента
// По умолчанию - окно приложения
viewportBounds: LayoutBoundsHolder? = null,
) { visible ->
// Вызовется когда компонент
// частично покажется или полностью скроется
if (visible) video.play() else video.pause()
},
)
}
}
🔗 Подробная документация и примеры тут
🔗 Альтернативная ссылка на статью
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍56🔥11❤9
#compose #подкапотом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23🔥4👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Полный исходный код тут
#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Решение использует dev сборки Jetpack Navigation 3 для Compose Multiplatform
#compose #jetpack #navigation3 #cmp #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44👍9❤3
Что нового:
👉 Основано на Jetpack Compose 1.9.3
👉 Артефакт compose.material3 теперь основывается на Jetpack Compose Material3 1.4.0, чтобы использовать предыдушую версию, то надо подключать зависимость традиционным образом
// было
implementation(compose.material3)
// заменить для совместимости
implementation("org.jetbrains.compose.material3:material3:1.8.2")
👉 Исправление багов на iOS
#compose #cmp #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3
JetCo - репозиторий с открытым кодом реализации разных компонентов на Compose Multiplatform. Поддерживаются все Compose таргеты
#compose #пример #opensource
#compose #пример #opensource
👍29🔥16👏2