Ссылки на гитхаб по заданию кидаем в комментарии. Ссылка на само задание - docs.google.com/document/d/1XiNfo4pGc5VT1e-88bU7JB23IxE3QAmVOovgFT7FSwA/edit?usp=sharing
Когда Андроид запускали, нам рассказывали как это классно разделять код и UI, а через 10 лет говорят - смотрите как классно - и код и UI в одном месте...
Слышал много раз такое, но я вот допустим всегда бомбил с этого xml потому что как по мне это всегда нелогично и меня дико бесило, что кодом это так сложно делается, поэтому я юзал xml
Спасибо большое. Было очень полезно посмотреть. Поолучил ответ на интересующий вопрос и появился новый вопрос. На 24:40 Вы говорите, что можно создать ViewModel прямо в композабл-функции и эта модель не будет пересоздаваться при рекомпоузе. А у меня так не работает. Пришлось вынести создание модели выше и передать её в композабл-функцию. В чём может быть косяк?
Спасибо все очень подробно. Появился только вопрос, когда ты лез в исходники функций, что там за спец символы такие типа неравно, стрелок, длинных равно? Это котлин вообще? Я как-то такого не встречал никогда
Хорошая тема. Спасибо за ролики. Вопрос: является ли Compose самодостаточным API? То есть можно ли с его помощью делать полностью готовое приложение или оно идет как дополнение?
@@luckytima2315 имхо джаву знать нужно не только потому, что легаси, а потому что котлин на джвм работает. Ну и исходники андроида, в конце концов, вы даже не посмотрите, если что не так.
Я не что и как тут работает, но знаю одно. В параметрах функции MainScreen должно быть viewModel: MainViewModel = viewModel(), а не viewModel: MainViewModel = MainViewModel(). Если сделать присвоение MainViewModel, а не viewModel(), то работать не будет. У меня по крайней мере так.
Из примеров гугла, можно увидеть что просто встать дебагером на начало функции это не вариант , видимо как и с корутинами функция разбивается на стейты 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 это очень неудобно.
На самом деле не запутано, а все понятно) Проблема в том, что ломается в принципе мышление, когда начинаешь писать на compose. Нельзя compose изучать итеративно, как это было с любым другим инструментом или подходом. Даже MVI можно изучить итеративно. С Jetpack Compose сначала надо забыть ВСЕ что ты знал об верстке через xml. Вообще все. А потом прям с 0 изучаешь, как строить экраны с новым подходом. Кстати чувствуешь себя в этот момент как джун) Непонятно что происходит, непонятно как надо писать... А иногда непонятно - а почему написанное тобой вообще работает.
Есть ещё решение) import androidx.compose.runtime.setValue import androidx.compose.runtime.getValue Я не разбирался зачем эти импорты нужны в работе, возможно с делегатами конфликт, или ещё что. Но чуть в том, что они автоматически не импортируются, и поэтому не может собраться. Собственно через * поэтому и запускается)
Ссылки на гитхаб по заданию кидаем в комментарии.
Ссылка на само задание - docs.google.com/document/d/1XiNfo4pGc5VT1e-88bU7JB23IxE3QAmVOovgFT7FSwA/edit?usp=sharing
Когда Андроид запускали, нам рассказывали как это классно разделять код и UI, а через 10 лет говорят - смотрите как классно - и код и UI в одном месте...
Слышал много раз такое, но я вот допустим всегда бомбил с этого xml потому что как по мне это всегда нелогично и меня дико бесило, что кодом это так сложно делается, поэтому я юзал xml
еще лет 10 и всё опять будем пилить в одной активити - и верстку и запросы на бек...
@@paulsoja2732 какая активити... ФУНКЦИИ!
Как же ты хорош! Счастья, здоровья, много лайков и подписчиков!
Спасибо большое!)
Спасибо за материал! С предвкушением жду Июль, когда Compose выйдет в Release!
Сам жду :)
Спасибо за видео! Как веб-разработчику, очень напомнило реакт, даже захотелось котлин изучить, посмотреть как оно там у вас)
Спасибо за видео.Коммент в поддержку!
Годнота! Я так понимаю, что Jetpack Compose - это как реакт, только для котлин?)))
Тип того да
Спасибо большое. Было очень полезно посмотреть. Поолучил ответ на интересующий вопрос и появился новый вопрос.
На 24:40 Вы говорите, что можно создать ViewModel прямо в композабл-функции и эта модель не будет пересоздаваться при рекомпоузе. А у меня так не работает. Пришлось вынести создание модели выше и передать её в композабл-функцию. В чём может быть косяк?
Очень круто, спасибо за объяснения)
Спасибо, Алексей!
🤌🤌
Ну наконец то дождались !
Отличное видео!. Интересно было бы посмотреть материал по android ui/unit тестированию. Было такое на канале или может есть в планах?
Пока нет, готовлю сценарий
Давно хотел менять текст лайвдатой. Но боялся, что засмеют. Теперь это легально)
И не только лайвдатой ))
Круто, спасибо!
Спасибо все очень подробно. Появился только вопрос, когда ты лез в исходники функций, что там за спец символы такие типа неравно, стрелок, длинных равно? Это котлин вообще? Я как-то такого не встречал никогда
Да это Котлин ) стрелки это лямбды, все вот эти длинные равно и не равно это сравнение по ссылке и значению, если мне память не изменяет )
Пройди kotlin koans, офигеешь от того что можно на чистом Котлин писать
@@awkwardquestion8643 о, спасибо посмотрю
Хорошая тема. Спасибо за ролики. Вопрос: является ли Compose самодостаточным API? То есть можно ли с его помощью делать полностью готовое приложение или оно идет как дополнение?
Да, это полноценное апи. На нем можно сделать все тоже самое, что и в стандартном xml. Плюс я полагаю, что xml станет deprecated со времени
@@MobileDeveloper Спасибо
Автор, стоит ли изучать разработку под Android сразу с котлина? Или ж обязательно начать нужно с java?
Скоро выйдет видео на эту тему, если вкратце, то Kotlin
@@MobileDeveloper так в вакансиях везде пишут,что надо java ,дурацкий легаси (((
@@luckytima2315 имхо джаву знать нужно не только потому, что легаси, а потому что котлин на джвм работает. Ну и исходники андроида, в конце концов, вы даже не посмотрите, если что не так.
супер
обнял
Спасибо ))
Лучше чай в кофе)
Окей))
Спасибо!
Интересная штука. Когда делаю пример с LoveData, то при первом клике значение меняется, а при втором, оно скидывается к начальному
Я не что и как тут работает, но знаю одно. В параметрах функции MainScreen должно быть viewModel: MainViewModel = viewModel(), а не viewModel: MainViewModel = MainViewModel(). Если сделать присвоение MainViewModel, а не viewModel(), то работать не будет. У меня по крайней мере так.
Пушка!))
Спасибо! )
Привет. Дай, пожалуйста, ссылку на mview архитектуру, если я правильно расслышал?
MVI? Можно посмотреть пример тут - github.com/AlexGladkov/JetpackComposeDemo
Но это не единственный пример реализации
Привет, а есть ли какой-нибудь дедлайн для работы?
Нет, как наберется какое-то вменяемое количество работ (хотя бы штук 5-6) устрою разбор
@@MobileDeveloper Спасибо за ответ.
Ох ох ох( сколько теперь нового учить...
Бедные Джуны как я люблю повторять
Из примеров гугла, можно увидеть что просто встать дебагером на начало функции это не вариант , видимо как и с корутинами функция разбивается на стейты
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, и плагин отключается. Это просто какой то совершенно другой левел.
@@sergeyo.1512 Не хотите об этом рассказать?) Готов предоставить площадку. Если есть желание напишите, пожалуйста, мне в Telegram - @neuradev
не очень понравился выбор темы для ввода в предмет, можно было бы начать с каких-то более общих вещей
А что там за новый паттерн архитектуры?
Ну он не новый в абсолютном значении . Насколько я помню, я имел ввиду, что всякие TEA, MVU не очень распространены были в андроиде
начинаю въезжать в логику компоуза. Посмотрим на сколько оно будет востребовано. Может будет как со swiftUI, а может и зайдет. На данный момент смущают превью экранов. Показывает криво, а если в компоуз функцию передаются параметры, то вообще студия показывает ворнинг, что для такого не стоит использовать превью. Ну и пока всё равно всё путается с кодом и после xml это очень неудобно.
Превью пока очень кривые это так и не пофиксили )
Ну то, что оно путается с кодом это задумка такая )
А как со SwiftUI ?
@@alexandershangin1191 SwiftUi в проде уже 2 или 3 года, а особо никто и не использует.
@@paulsoja2732 Так его не используют из-за ios13, ну и определенной баговости ))) А так вроде все хотят его использовать)
@@alexandershangin1191 среди тех ios разработчиков, которых я знаю, никто не хочет использовать.
1:00 А так разве можно находить viewModel?
Вообще нет, но видео не об этом )
@@MobileDeveloper блин, начал писать новое приложение на compose. Как же это круто! Так просто всё, удобно!
@@asp424 это hello world приложение?
@@sanek1985t нет
А что с внедрением зависимостей во вью модель?
Про хилт будет отдельное видео.
Чёт как-то всё позапутано в этом видео...
🤷♂️🤷♂️
На самом деле не запутано, а все понятно)
Проблема в том, что ломается в принципе мышление, когда начинаешь писать на compose.
Нельзя compose изучать итеративно, как это было с любым другим инструментом или подходом. Даже MVI можно изучить итеративно.
С Jetpack Compose сначала надо забыть ВСЕ что ты знал об верстке через xml. Вообще все.
А потом прям с 0 изучаешь, как строить экраны с новым подходом.
Кстати чувствуешь себя в этот момент как джун) Непонятно что происходит, непонятно как надо писать... А иногда непонятно - а почему написанное тобой вообще работает.
@@mishaeliseev они похожи только направлением :)
И названия похожие некоторые)
@@RasM24 почему забыть? Его можно встраивать в xml . Зачем? Ну, если проект большой и сразу ее перевести все
почему так мало подписчиков???
Сам удивляюсь ) наверное мало людей рекомендуют мой канал ))
А у меня импорт remember не работает приходится менять на * и всё работает.
Да сорри забыл указать импорты. Там можно ручками ещё прописать ну либо звёздочку сделать. Надеюсь пофиксят в ближайших релизах
Есть ещё решение)
import androidx.compose.runtime.setValue
import androidx.compose.runtime.getValue
Я не разбирался зачем эти импорты нужны в работе, возможно с делегатами конфликт, или ещё что.
Но чуть в том, что они автоматически не импортируются, и поэтому не может собраться.
Собственно через * поэтому и запускается)
Да да вот я про них ) спасибо )
5:34
Что по ссылке на ролик про то как устроен Composer?
Забыл. Добавил в описание ссылку
Спасибо!
Спасибо огромное за поддержку!