Ссылки на гитхаб по заданию кидаем в комментарии. Ссылка на само задание - docs.google.com/document/d/1XiNfo4pGc5VT1e-88bU7JB23IxE3QAmVOovgFT7FSwA/edit?usp=sharing
Когда Андроид запускали, нам рассказывали как это классно разделять код и UI, а через 10 лет говорят - смотрите как классно - и код и UI в одном месте...
Слышал много раз такое, но я вот допустим всегда бомбил с этого xml потому что как по мне это всегда нелогично и меня дико бесило, что кодом это так сложно делается, поэтому я юзал xml
Спасибо большое. Было очень полезно посмотреть. Поолучил ответ на интересующий вопрос и появился новый вопрос. На 24:40 Вы говорите, что можно создать ViewModel прямо в композабл-функции и эта модель не будет пересоздаваться при рекомпоузе. А у меня так не работает. Пришлось вынести создание модели выше и передать её в композабл-функцию. В чём может быть косяк?
@@luckytima2315 имхо джаву знать нужно не только потому, что легаси, а потому что котлин на джвм работает. Ну и исходники андроида, в конце концов, вы даже не посмотрите, если что не так.
Я не что и как тут работает, но знаю одно. В параметрах функции MainScreen должно быть viewModel: MainViewModel = viewModel(), а не viewModel: MainViewModel = MainViewModel(). Если сделать присвоение MainViewModel, а не viewModel(), то работать не будет. У меня по крайней мере так.
Хорошая тема. Спасибо за ролики. Вопрос: является ли Compose самодостаточным API? То есть можно ли с его помощью делать полностью готовое приложение или оно идет как дополнение?
Спасибо все очень подробно. Появился только вопрос, когда ты лез в исходники функций, что там за спец символы такие типа неравно, стрелок, длинных равно? Это котлин вообще? Я как-то такого не встречал никогда
Из примеров гугла, можно увидеть что просто встать дебагером на начало функции это не вариант , видимо как и с корутинами функция разбивается на стейты Column { // this will recompose when [header] changes, but not when [names] changes Text(header, style = MaterialTheme.typography.h5) Divider() // LazyColumn is the Compose version of a RecyclerView. // The lambda passed to items() is similar to a RecyclerView.ViewHolder. LazyColumn { items(names) { name -> // When an item's [name] updates, the adapter for that item // will recompose. This will not recompose when [header] changes NamePickerItem(name, onNameClicked) } } } }
@@MobileDeveloper Я как то тоже озаботился. Хотелось чего то автоматического, что бы с одной стороны не писать вручную, с другой не засорять код классов логированием. Надежда была на написание плагина на poet, но в процессе поисков я вышел на АОП. С хорошими такими костылями удалось aspectJ прикрутить к котлину, причем в формате flavor. Теперь для логирования всех обращений к методам и свойствам класса достаточно пометить класс аннотацией @Log, причем для релиза аннатацию убирать не надо, просто меняем flavor, и плагин отключается. Это просто какой то совершенно другой левел.
начинаю въезжать в логику компоуза. Посмотрим на сколько оно будет востребовано. Может будет как со swiftUI, а может и зайдет. На данный момент смущают превью экранов. Показывает криво, а если в компоуз функцию передаются параметры, то вообще студия показывает ворнинг, что для такого не стоит использовать превью. Ну и пока всё равно всё путается с кодом и после xml это очень неудобно.
Есть ещё решение) import androidx.compose.runtime.setValue import androidx.compose.runtime.getValue Я не разбирался зачем эти импорты нужны в работе, возможно с делегатами конфликт, или ещё что. Но чуть в том, что они автоматически не импортируются, и поэтому не может собраться. Собственно через * поэтому и запускается)
На самом деле не запутано, а все понятно) Проблема в том, что ломается в принципе мышление, когда начинаешь писать на compose. Нельзя compose изучать итеративно, как это было с любым другим инструментом или подходом. Даже MVI можно изучить итеративно. С Jetpack Compose сначала надо забыть ВСЕ что ты знал об верстке через xml. Вообще все. А потом прям с 0 изучаешь, как строить экраны с новым подходом. Кстати чувствуешь себя в этот момент как джун) Непонятно что происходит, непонятно как надо писать... А иногда непонятно - а почему написанное тобой вообще работает.