В Compose 1.7.0 (пока в альфа) появилась возможность использовать GraphicLayer API и получить Bitmap вместо использовать Android API для этого
👍23🔥12
Когда использовать?
✅ Функция является обёрткой над другой 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 #оптимизации
Please open Telegram to view this post
VIEW IN TELEGRAM
👍50🔥1👏1
Также разрабатывают схожее 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
Telegram
Compose Broadcast
⚙️ retain {} в Compose для сохранения данных между входами в композицию
В репозитории Compose ведутся работы над тем, чтобы добавить API retain {}, которое в отличие от remember будет запоминать данные дольше (между входами и выходами в композиции, подобно…
В репозитории Compose ведутся работы над тем, чтобы добавить API retain {}, которое в отличие от remember будет запоминать данные дольше (между входами и выходами в композиции, подобно…
🤔54🔥18🤯6👍5❤1