Comments 5
Как во вьюхах оформляется разный вид для разных ориентаций экрана, направления письма, размера экрана?
Какова скорость и потребление памяти, если сверстать программно на вьюхах и на Compose?
При переносе из Figma плагином код читаем получается? Насколько просто с ним дальше работать?
В целом выглядит как хотели решить какую-то проблему (какую?) и наплодили новых.
Вместо того, чтобы отдать логику разметки отдельному файлу, при этом работать с логикой отображения на нативном Котлине, как альтернативу предлагают вот такое - по моему абсурд. Реализация recyclerview не требуется в принципе. Это уже существует. По факту нужен лишь адаптер. Ну и что, не проще работать с контентом, который должен быть показан в отдельном списке, в отдельном файле? Полностью инкапсуляцируется логика, передаёшь адаптеру сырой массив объектов, а он тебе рисует его, и что в таком подходе плохого?
Вот если бы Compose из коробки предоставил хотя бы блюр, да чтобы работал не абы как (чтоб не было тупых отговорок что будет работать только в последней версии Андроид), а с минимального Андроида, который поддерживается Compose... Тогда мы бы поверили, что он реально круче.
Но пока, из того что вижу, Compose используют либо новички, которые не знают что это такое и только что слепо тыкнули кнопку "создать проект", либо какие-то еретики, которым всё не угодишь.
Подмечал один мой друг, у iOS с вёрсткой всё на голову выше, чем мы имеем на Android. И сложные эффекты, которые видя что работают в iOS просят добавить везде дизайнеры, для нас превращаются в настоящую боль и множество необоснованных багов.
Мне кажется, Compose максимально ультимативное решение для максимально типичного MVP - чтобы всё было в одном файле: о какой либо чистой архитектуре говорить не призодится
По поводу LaunchEffect у вас не полное описание и не передан ключевой момент -
LaunchedEffect: run suspend functions in the scope of a composable
Ниже пример который соберется и будет работать, но компилятор подсветит ошибку -
Calls to launch should happen inside a LaunchedEffect and not composition
@Composable
fun Timer() {
var seconds by remember { mutableStateOf(0) }
CoroutineScope(Dispatchers.IO).launch {
delay(1000)
seconds++
}
Text(text = "Seconds: $seconds")
}
@Composable
fun Timer() {
var seconds by remember { mutableStateOf(0) }
LaunchedEffect(seconds) {
delay(1000)
seconds++
}
Text(text = "Seconds: $seconds")
}
Использование while(true) внутри Composable тоже спорный подход. Я бы реализовал таймер так
Фантастический Compose и его побочные эффекты