Compose Broadcast – Telegram
Compose Broadcast
5.82K subscribers
341 photos
89 videos
559 links
Все о Jetpack Compose и Compose Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Android - @android_broadcast
iOS - @ios_broadcast
Kotlin - @kotlin_broadcast
Download Telegram
📹 Полный обзор Ultron - UI тесты для Compose Multiplatform (3 часа) и версия на 📹 VK Video

Обзор фреймворка Ultron для написания UI тестов на Android. Если пишите чисто нативно под Android на Kaspresso, то переход дело вкуса, но вот именно на Compose Multiplatform открывается вся мощь!

🔗 Обсуждение технологии в чате @ultron_framework

8:13 Стандартный фреймворк для UI тестов
16:00 Kaspresso
18:48 Тесты на Ultron
24:28 Сравнение с Google и Kaspresso
25:25 Интеграционные Compose тесты
28:10 Пример 1. Тест на разных ферймворках
40:46 2 интеграционный тест
41:35 useUnmergedTree в Google framework
44:41 Пример 2. Тест на разных ферймворкахю
1:00:56 Ultron, индексы по всему LazyList
1:07:36 Ultron, testTag - 2 способ поиска в LazyList
1:11:41 Allure report, Ultron и Kaspresso
1:23:15 Разница в allure report между ними(Ultron и Kaspresso)
1:31:07 1 тест RecyclerView на других фреймворках, Page Object
1:35:40 Ultron, 1 тест RecyclerView, Page Object
1:39:00 2 тест RecyclerView на других фреймворках, Page Object
1:42:38 Ultron, 2 тест RecyclerView, Page Object
1:53:00 Ultron, Сравнение тестов LazyList и RecyclerView
1:54:11 Ultron, RecyclerView features
2:01:50 Ultron, UI automator, сравнение с Google
2:06:15 Ultron, тест WebView
2:11:04 Ultron listeners (и далее внутрянка)
2:14:43 Ultron extensions
2:19:55 Ultron withAssertion extension
2:23:43 Ultron performOnViewForcibly
2:26:11 Ultron, View custom extensions
2:34:04 Ultron, Compose custom extensions
2:41:16 Ultron, Rules management
2:50:48 Ultron, test data for single test

#compose #тестирование #anroid #ios #desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
⚙️ У нас в проекте был Compose Multiplatform, но снова я бы так не делал (10 мин)

Лидер команды Яндекса делится опытом и рассказывает, какие трудности возникли при реализации кроссплатформенного проекта, а также чего лучше избегать в современной мобильной разработке.

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🔥 На конференции по Аврора ОС объявили о поддержки 🏝 Kotlin Multiplatform и в скоро будущем будет работать и ⚙️ Compose Multiplatform

Как только станет доступно попробовать - подключу в свой проект Frame.io

Источник - @AuroraDevelopers

#kmp #аврораос
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
⚙️🤖 Что важно настроить в AndroidManifest, если вы разрабатываете приложение на KMP с поддержкой Android

Если вы Android разработчик, то вряд ли вам это пригодится, а вот для незнакомых глубоко с платформой от Google точно будет полезно

#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Storytale - Gradle Plugin для генерации интерактивной библиотеки компонентов для вашего UI от TouchLab. Получите превью вашей дизайн системы в разных конфигурациях

Обзор в статье

#kotlin #compose #touchlab
👍13
⚙️ JetBrains собирает реальные примеры приложение на Compose Multiplatform, чтобы подсветить их на главной странице сайта, видео, докладах и других материалах. Подать ваше приложение можно тут

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
⚙️ Вышел Jetpack Compose 1.8.0

Все новинки расскажу отдельными постами в @compose_broadcast, а именно:
👉 Autofill
👉 ресайзинг текста под контейне
👉 новое API для отслеживания Composable на экране
👉 анминирование границ Composable
👉 стабилизация API (убрали экспериментальные аннотации)
👉 ContextualFlowRow и ContextualFlowColumn теперь deprecated, им на замену используйте FlowRow и FlowColumn
👉 диалоги теперь учитывают режим экрана edge-to-edge
👉 упростили тестирование ClickableText
👉 появилась возможность кастомизации overscroll

Свежий BOM для новых версий
implementation(platform("androidx.compose:compose-bom:2025.04.01"))


#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39
⚙️ В Jetpack Compose 1.8.0 появилась поддержка системного Autofill сервиса в Android.

Теперь через Modifier можно указать что за контент будет в поле ввода.
TextField(
state = rememberTextFieldState(),
modifier = Modifier.semantics {
contentType = ContentType.Username
}
)


Также появилась поддержка автоматического сохранения логина/пароля. Автоматически будет вызывать при уходе с экрана, но вы также можете сами контролировать процесс. Больше подробностей в документации

#compos #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64
This media is not supported in your browser
VIEW IN TELEGRAM
В Jetpack Compose 1.8.0 появилась возможность автоматического изменения размера текста чтобы вписаться в заданные размеры

#compose #android
👍135
Compose Broadcast
В Jetpack Compose 1.8.0 появилась возможность автоматического изменения размера текста чтобы вписаться в заданные размеры #compose #android
Пример настройки autoresize текста:
Box {
BasicText(
text = "Hello World",
maxLines = 1,
autoSize = TextAutoSize.StepBased(
minFontSize = TextAutoSizeDefaults.MinFontSize,
maxFontSize = TextAutoSizeDefaults.MaxFontSize,
stepSize = 0.25.sp
)
)
}


#compose #android
👍49
В Jetpack Compose 1.8.0 появились новые опции для сокращения текста если он не влазит. Как это выглядит смотрите в комментариях к посту
val text = "This is a long text that will overflow"
Column(Modifier.width(200.dp)) {
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis) // была
Text(text, maxLines = 1, overflow = TextOverflow.StartEllipsis) // новая
Text(text, maxLines = 1, overflow = TextOverflow.MiddleEllipsis) // новая
}


#compose
👍65
UPD Расширилась поддержка HTML в AnnotatedString. Теперь поддерживаются буллеты

Text(
AnnotatedString.fromHtml(
"""
<h1>HTML content</h1>
<ul>
<li>Hello,</li>
<li>World</li>
</ul>
""".trimIndent()
)
)

#compose
👍76
Если вам нужно отслеживать положении Composable на экране, то вместо onGloballyPositioned теперь в Compose 1.8 появился новый modifier - onLayoutRectChanged. Он покрывает множество сценариев использования onGloballyPositioned, но делает это с меньшей нагрузкой

Box(
modifier = Modifier
.size(100.dp)
.background(Color.Red)
.onLayoutRectChanged { rect ->
println("Position: ${rect.left},${rect.top} Size: ${rect.width}x${rect.height}")
}
)


#compose
👍70
This media is not supported in your browser
VIEW IN TELEGRAM
В Compose 1.8 появилась возможность анимировать границы Composable с помощью modifier animateBounds

#compose #анимация
👍79
Box(
Modifier
.width(if(expanded) 180.dp else 110.dp)
.offset(x = if (expanded) 0.dp else 100.dp)
.animateBounds(lookaheadScope = this@LookaheadScope)
.background(Color.LightGray, shape = RoundedCornerShape(12.dp))
.height(50.dp)
) {
Text("Layout Content", Modifier.align(Alignment.Center))
}
👍43
⚙️ Вышел Compose Multiplatform 1.8.0 RC 1

После релиза Compose 1.8.0 сразу же выпустили свежий RC мультиплатформенной версии. Внесены улучшения в Compose Web для Safari, но также появились и критические изменения:
👉 Зависимость material/material3 больше не добавляет зависимость material-icons-core, её нужно будет добавлять явно.
👉 Больше не поддерживается LocalTextInputService.
👉 Требуется Kotlin Gradle Plugin 2.X.
👉 Старый плагин org.jetbrains.compose.compiler больше не поддерживается.

#compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
CMP Container Size - KMP библиотека для получения размера текущего окна в DP. Пригодится тем кому не подходят стандартные классы размеров окон из Jetpack WindowManager

@Composable
fun App() {
val containerSize = currentWindowContainerSize()

if (containerSize.width >= 600.dp) {
TabletLayout()
} else {
PhoneLayout()
}
}


#compose
👍30
⚙️ В каком порядке выполняется Composable и DisposableEffect и LaunchedEffect (EN,5м)

При показе одной Composable функции
1. Фаза композции
2. Регистрация Side Effect во время композиции
3. Запуск Side Effect-ов
4. DisposableEffect синхронный и запускается сразу после композиции
5. LaunchedEffect запускается после синхронных Side Effect-ов

В статье также рассматривается что происходит при навигации между Composable

🔗 Альтернативная ссылка

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍45