Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
- Telegram Web
Telegram Web
⚙️ Создание кастомного тултипа с Jetpack Compose (11м)

Пример реализации виджета тултипа, который должен уметь:
👉 Показываться под якорным элементом в виде облачка
👉 Скрываться согласно нашей кастомной логике
👉 Добавляться в существующие экраны с минимальными затратами
👉 Не блокировать взаимодействие с остальным UI

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Оптимизация Composable функции в с помощью спец. аннотаций `@ReadOnlyComposable`, `@NonRestartableComposable` и `@NonSkippableComposable`, которые дают Compose компилятору гарантии на основе которых упрощается генерируемый код, что позволит работать быстрее.

Очень подробный разбор в статье (EN) Материал обязателен тем кто пишет свой UI Kit или много собственных компонентов на Compose

#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Rippler - опен-сорс библиотека для создания нативного для платформы и одинакого на всех версиях ОС эффекта нажатия в Compose Multiplatform.

Почему важно применить? Да потому что в Compose MP по умолчанию используется эффект в лоб от Material, да еще и не в лучшей реализации.

Подробнее про реализацию можно почитать в статье (7м)

#compose #пример
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Руководство по созданию анимации границы-муравьев на Compose через Node API

#compose
⚙️ В Compose 1.9.0 появится возможность кастомиризровать тени

Новая возможность появилась в Compose 1.9.0-alpha04. В release notes рассказывают про "новый кастомизируемый фреймвор теней" 🤯

@Composable
fun DropShadowSample() {
Box(Modifier.size(100.dp, 100.dp)
.dropShadow(RectangleShape, DropShadow(12.dp)))
}

@Composable
fun InnerShadowSample() {
Box(Modifier.size(100.dp, 100.dp)
.innerShadow(RectangleShape, InnerShadow(12.dp)))
}


#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Вышел Jetpack Compose 1.9.0-alpha04

Самый просто способ обновиться - использовать свейжи BOM файл
// Добавляем в зависимости перед добавлением Compose зависимостей
// и лучше версию зависимостей не указывать вовсе, чтобы они всегда из BOM брались
implementation("androidx.compose:compose-bom-alpha:2025.06.00")


#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ LazyLayout стало Stable API в Jetpack Compose 1.9.0-alpha04

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ API для управления контекстным меню текста сделали публичным в Jetpack Compose 1.9.0-alpha04

@Composable
fun AddComponentsToTextContextMenu() {
val textFieldState = rememberTextFieldState()
BasicTextField(
state = textFieldState,
modifier =
Modifier.addTextContextMenuComponents {
separator()
item(key = ClearKeyDataObject, label = "Clear") {
textFieldState.clearText()
close()
}
separator()
}
)
}


#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Для текстовых полей в Compose добавили поддержку умного выделения. Например, при выделения части Url или адреса на карте в тексте, система сама автоматом выделит всё. Уже работает в Compose 1.9.0-alpha04

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🐱 OpenAnimationApp - демо приложение с демонстрацией работы разных Lottie анимаций на Android, iOS, Desktop/JVM и Web с использованием Kotlin Multiplatform. Демо сделано на основе Compottie - Compose Multiplatform обертки Lottie

#compose #анимация #android #desktop #ios #wasm #js #web
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример реализации подобного эффекта для любого Compose элемента

#compose
Подборка(10м) основных рекомендаций как писать на Compose, чтобы все юыло красиво и удобно в использовании.

#compose
Розыгрыш книги "Коtlin в действии" 2-е издание с автографом одного из авторов - Романа Елизарова 🤯 Совместно с Yandex For Mobile делаем для вас розыгрыш 2 книг по Kotlin от создателей языка и его экосистемы!

Условия розыгрыша просты
1. Подписать на @kotlin_broadcast
2. Подписаться на @yandexformobile

Итоги подведем 12 июня в @kotlin_broadcast

#розыгрыш
Forwarded from Android Broadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Вышел Compose Multiplatform 1.8.2 с исправлением багов и поддержкой указания данных для параметров в превью режиме из common кода (нужна поддержка в IDE)

class TextPreviewParameterProvider : PreviewParameterProvider<String> {
override val values = sequenceOf("Hello, Compose!", "Hello, World!")
}

/**
* Получится превью со всеми возможными
* значениями параметра из провайдера
*/
@Preview
@Composable
fun SamplePreview(
@PreviewParameter(TextPreviewParameterProvider::class) text: String
) {
Text(text)
}


#compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Пример реализации Modifer.privacySensitive() для Compose Multiplatform. Эффект - сокрытие UI при уходе с экрана

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Первая Beta Jetpack Compose 1.9.0 уже вышла

Самый простой способ попробовать новую версию - использовать BOM в Gradle
dependencies {
implementation(platform("androidx.compose:compose-bom-beta:2025.06.01")
}


#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Compose 1.8.3 с исправлением багов в UI артефакте

Самый простой способ попробовать новую версию - использовать BOM в Gradle
dependencies {
implementation(platform("androidx.compose:compose-bom:2025.06.01")
}


#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kotlin Adept Notes (Alex Panov)
Как подружить LifecycleOwner и Decompose

Некоторые API в Jetpack библиотеках принимают в качестве параметра LifecycleOwner, например, так сделано в CameraX. Однако если в вашем проекте используется Decompose, и вы используете LocalLifecycleOwner для получения текущего значения в Composable функции, то жизненный цикл будет работать некорректно: он будет соответствовать жизненному циклу Activity или Fragment, так как Decompose нигде не переопределяет этот CompositionLocal и использует собственный жизненный цикл из библиотеки Essenty.

Чтобы исправить эту проблему, необходимо сконвертировать LifecycleOwner из Decompose в его аналог из Jetpack. Однако из коробки пока что такого адаптера нет, и придётся написать его самостоятельно, по аналогии с конвертацией ЖЦ в Essenty.

В версии Decompose 3.4.0 эта проблема будет решаться проще: появится JetpackComponentContext, как отдельная зависимость, и можно будет сразу получить нужный lifecycle прямо из компонента.

Поэтому будьте внимательны при использовании CompositionLocal для работы с жизненным циклом, если навигация в проекте построена на Decompose.

#Decompose #Lifecycle
⚙️ Вышла вторая Beta Jetpack Compose 1.9.0

В новой сборке исправили баги, а также добавили поддержку smart элементов в контекстных меню

Самый простой способ попробовать новую версию - использовать BOM в Gradle
dependencies {
implementation(platform("androidx.compose:compose-bom-beta:2025.06.02")
}


#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/04 05:37:44
Back to Top
HTML Embed Code: