Compose Broadcast
5.42K subscribers
313 photos
84 videos
509 links
Все о Jetpack Compose и Compose Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Android - @android_broadcast
iOS - @ios_broadcast
Kotlin - @kotlin_broadcast
Download Telegram
В Compose 1.7.0 (пока в альфа) появилась возможность использовать GraphicLayer API и получить Bitmap вместо использовать Android API для этого
👍23🔥12
⚙️ Одна из полезных оптимизаций для работы Compose - использование аннотации @NonRestartableComposable, которая сообщает Compose: «Не перезапускать эту функцию, даже если родительский компонент обновился».

Когда использовать?
Функция является обёрткой над другой Composable функцией
Если метод не зависит от состояния и всегда ведёт себя одинаково.
Когда нужно оптимизировать производительность и уменьшить лишние перестроения.
В случаях, когда внутри создаётся сложный объект, который не должен пересоздаваться

// Пример функции из Jetpack Material 3
@NonRestartableComposable
@Composable
fun Icon(
painter: Painter,
contentDescription: String?,
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current,
contentScale: ContentScale = ContentScale.Fit
) {
Image(painter = painter, contentDescription = contentDescription, modifier = modifier, colorFilter = tint.asColorFilter())
}


Аннотацию надо использовать разумно и не стоит использовать, если…

Функция зависит от состояния (включая CompositonLocal)
// НЕ НАДО @NonRestartableComposable
@Composable
fun Timer() {
var time by remember { mutableStateOf(0) }

LaunchedEffect(Unit) {
while (true) {
delay(1000)
time++
}
}

Text("Time: $time")
}


‼️ Будьте внимательны и убирайте/добавляйте аннотацию, если код Composable функции меняется

#composable #оптимизации
Please open Telegram to view this post
VIEW IN TELEGRAM
👍50🔥1👏1
⚙️ RetainedEffect - новый side effect в Compose, который позволит сохранять данные, когда покидается композиция, но в неё скоро вернутся. Например, поворот экрана в Android. Некий аналог сохранения данных в памяти, как это делается с ViewModel.

Также разрабатывают схожее API retain {}

Пример использования RetainedEffect:
@Composable
@NonRestartableComposable
public fun RetainedEffect(key1: Any?, effect: RetainedEffectScope.() -> RetainedEffectResult) {
retain(key1) { RetainedEffectImpl(effect) }
}

public class RetainedEffectScope {
public inline fun onRetired(crossinline onRetiredEffect: () -> Unit): RetainedEffectResult =
object : RetainedEffectResult {
override fun retire() {
onRetiredEffect()
}
}
}


Кажется, что Compose хочет избавится от ViewModel и напрямую работать с получением данных без ViewModel. Как вам такой подход?

#composable
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔54🔥18🤯6👍51