GroupingBy vs groupBy
#kotlin
В Kotlin есть целый набор операторов для работы с коллекциями. Одни из самых распространённых — groupBy, который возвращает Map<K, List<V>>, где V — элемент исходной коллекции, а K — ключ, по которому мы группируем нашу коллекцию.
Например, если мы хотим сгруппировать пользователей по идентификатору, который имеет тип String, то на выходе мы получим Map<String, List<User>>. Иначе говоря, мы превращаем нашу изначальную коллекцию в несколько меньших, сгруппированных по определённому признаку.
Это крутой метод, но не многие знают про
В нём гораздо меньше функции, однако, если вам очень важна производительность, подобный метод может помочь. Ну и просто будете знать, что существует такая альтернатива, вдруг пригодится на собеседовании. 😁
Подробнее о кейсах и о том, как его использовать можно почитать тут.
#kotlin
В Kotlin есть целый набор операторов для работы с коллекциями. Одни из самых распространённых — groupBy, который возвращает Map<K, List<V>>, где V — элемент исходной коллекции, а K — ключ, по которому мы группируем нашу коллекцию.
Например, если мы хотим сгруппировать пользователей по идентификатору, который имеет тип String, то на выходе мы получим Map<String, List<User>>. Иначе говоря, мы превращаем нашу изначальную коллекцию в несколько меньших, сгруппированных по определённому признаку.
Это крутой метод, но не многие знают про
groupingBy
, который может быть полезен для задач, где особенно важна производительность, ведь он не создаёт промежуточный список для каждой маленькой коллекции. Вместо этого метод возвращает объект Grouping, который по сути является обёрткой над Iterator. В нём гораздо меньше функции, однако, если вам очень важна производительность, подобный метод может помочь. Ну и просто будете знать, что существует такая альтернатива, вдруг пригодится на собеседовании. 😁
Подробнее о кейсах и о том, как его использовать можно почитать тут.
MVI
#architecture #beginners
Архитектура MVI достаточно распространённый подход к созданию мобильных приложений. Но многие разработчики не используют её по причине усложннённости по сравнению с MVVM и MVP. Ну и стоит заметить, что многие используют MVI некорректно, получая не тот результат, который ожидали.
Есть крутейший цикл статей, который поможет проникнуться и наконец начать использовать MVI-подход в приложениях.
Автор рассказывает про Model, View and Intent, State Reducer, независимые UI-компоненты и ещё столько же статей про основные аспекты MVI.
Одним словом, крайне рекомендую. 👍
#architecture #beginners
Архитектура MVI достаточно распространённый подход к созданию мобильных приложений. Но многие разработчики не используют её по причине усложннённости по сравнению с MVVM и MVP. Ну и стоит заметить, что многие используют MVI некорректно, получая не тот результат, который ожидали.
Есть крутейший цикл статей, который поможет проникнуться и наконец начать использовать MVI-подход в приложениях.
Автор рассказывает про Model, View and Intent, State Reducer, независимые UI-компоненты и ещё столько же статей про основные аспекты MVI.
Одним словом, крайне рекомендую. 👍
Android Dev Summit
#conference
Думаю, что большинство из вас в курсе, но всё же напомню.
Уже сегодня состоится конференция для Android-разработчиков от Google — Android Dev Summit, где у нас будет множество прекрасных докладов.
Доклады разделены на следующие темы:
🔹Jetpack Compose, now with Material You — понятно из названия, что нам расскажут про интеграцию Material You с Compose: тут и про анимации, и про темы, и про цвета, и про виджеты.
🔹 Building for large screens — расскажут о том, как строить свои приложения для больших экранов. Тема не новая, ведь мы всегда имеем в наличии планшеты, однако последний тренд говорит нам о сгибаемых экранах, под которые вскоре придётся адаптировать свои приложения.
🔹 Modern Android Development — тут опишут лучшие практики для современной Android-разработки: Flow, WorkManager, Room, AndroidX Media, Gradle Plugin. В общем, крутой раздел, который будет интересен большинству разработчиков.
🔹 Private and secure by design — небольшой раздел, где расскажут о современных штуках, связанных с данными пользователей, что стоит ожидать нам, разработчикам в ближайшем будущем.
🔹 Android 12 — расскажут о том, на что стоит обратить внимание в последней версии Android.
Ну и ещё парочку разделов про приложения на Android Auto, TV и играх.
Ссылка на все доклады тут.
#conference
Думаю, что большинство из вас в курсе, но всё же напомню.
Уже сегодня состоится конференция для Android-разработчиков от Google — Android Dev Summit, где у нас будет множество прекрасных докладов.
Доклады разделены на следующие темы:
🔹Jetpack Compose, now with Material You — понятно из названия, что нам расскажут про интеграцию Material You с Compose: тут и про анимации, и про темы, и про цвета, и про виджеты.
🔹 Building for large screens — расскажут о том, как строить свои приложения для больших экранов. Тема не новая, ведь мы всегда имеем в наличии планшеты, однако последний тренд говорит нам о сгибаемых экранах, под которые вскоре придётся адаптировать свои приложения.
🔹 Modern Android Development — тут опишут лучшие практики для современной Android-разработки: Flow, WorkManager, Room, AndroidX Media, Gradle Plugin. В общем, крутой раздел, который будет интересен большинству разработчиков.
🔹 Private and secure by design — небольшой раздел, где расскажут о современных штуках, связанных с данными пользователей, что стоит ожидать нам, разработчикам в ближайшем будущем.
🔹 Android 12 — расскажут о том, на что стоит обратить внимание в последней версии Android.
Ну и ещё парочку разделов про приложения на Android Auto, TV и играх.
Ссылка на все доклады тут.
Modern Android Development
#conference
Google решили не мелочиться и выложить все видео с Dev Summit в самом его начале. Отдельный плюс за то, что все доклады короткие и их можно легко посмотреть.
Я потихоньку смотрю 🤓
Делюсь с вами самыми интересными для меня докладами из плейлиста Modern Android Development.
1️⃣Room 2.4.0 — хорошее видео, где рассказывается о новинках в последней версии Room: автомиграциях, MultiMap и т.д. Будет полезно, чтобы быть в теме, тем более, что версия уже стабильна.
2️⃣Kotlin Flow in practice — здесь вам расскажут о полном цикле работы с Flow в Android. Все примеры практические. Упомянут и о подводных камнях при работе, а также о взаимодействии с жизненным циклом.
3️⃣WorkManager — Back to the foreground — будет полезно новичкам, кто не работал с Worker, ну или для тех, кто хочет освежить свои знания.
Буду рад, если поделитесь своими фаворитами из этого плейлиста. 😉
#conference
Google решили не мелочиться и выложить все видео с Dev Summit в самом его начале. Отдельный плюс за то, что все доклады короткие и их можно легко посмотреть.
Я потихоньку смотрю 🤓
Делюсь с вами самыми интересными для меня докладами из плейлиста Modern Android Development.
1️⃣Room 2.4.0 — хорошее видео, где рассказывается о новинках в последней версии Room: автомиграциях, MultiMap и т.д. Будет полезно, чтобы быть в теме, тем более, что версия уже стабильна.
2️⃣Kotlin Flow in practice — здесь вам расскажут о полном цикле работы с Flow в Android. Все примеры практические. Упомянут и о подводных камнях при работе, а также о взаимодействии с жизненным циклом.
3️⃣WorkManager — Back to the foreground — будет полезно новичкам, кто не работал с Worker, ну или для тех, кто хочет освежить свои знания.
Буду рад, если поделитесь своими фаворитами из этого плейлиста. 😉
Миграция на Material Design 3
#material #design
Весной этого года, в Google анонсировали Material You, который, по сути, является развитием Material Design.
Главная фича, которая там есть — это поддержка dynamic color, к которой можно подготовить свои приложения.
Ну и в целом, изменились правила по работе с цветами и шрифтами. Давайте посмотрим чуть подробнее, на что стоит обратить внимание.
1️⃣ Обновляем тему на Material 3 — для этого нужно заменить
2️⃣ Меняем цвета и темы — добавилось несколько цветов, а именно Tertiary color, цвета контейнеров и несколько вариантов цветов
3️⃣ Изменяем Typography — поменялся нейминг для вариаций шрифтов. В целом, ничего сложного, их число стало меньше и теперь они вместо номеров имеют названия Small, Medium и Large.
4️⃣ Меняем компоненты — изменился внешний вид
В целом, мне нравится. Осталось дело за главным — приспособить свои приложения к этому дизайну.
Больше деталей и информации можно найти тут.
#material #design
Весной этого года, в Google анонсировали Material You, который, по сути, является развитием Material Design.
Главная фича, которая там есть — это поддержка dynamic color, к которой можно подготовить свои приложения.
Ну и в целом, изменились правила по работе с цветами и шрифтами. Давайте посмотрим чуть подробнее, на что стоит обратить внимание.
1️⃣ Обновляем тему на Material 3 — для этого нужно заменить
Theme.MaterialComponents.*
на Theme.Material3.*
и Widget.MaterialComponents.*
на Widget.Material3.*
.2️⃣ Меняем цвета и темы — добавилось несколько цветов, а именно Tertiary color, цвета контейнеров и несколько вариантов цветов
colorOnSurface
. Проще всего добавить их при помощи Material Theme Builder. 3️⃣ Изменяем Typography — поменялся нейминг для вариаций шрифтов. В целом, ничего сложного, их число стало меньше и теперь они вместо номеров имеют названия Small, Medium и Large.
4️⃣ Меняем компоненты — изменился внешний вид
BottomNavigationView
, AppBar
, FloatingActionButton
и кнопок. В целом, мне нравится. Осталось дело за главным — приспособить свои приложения к этому дизайну.
Больше деталей и информации можно найти тут.
Privacy Dashboard
#security #android
В Android 12 добавилась интересная для пользователя фича — Pricacy Dashboard. С каждой версией добавляются всё новые и новые инструменты для защиты приватности пользователей, и вот теперь каждый может посмотреть, какое приложение и когда использовало локацию, микрофон и камеру за последние сутки.
Для разработчиков это означает то, что они должны будут проверить свои приложения на предмет реальной нужды использования тех или иных данных от пользователя. В том числе и использование сторонними библиотеками.
Чуть раньше было представлено Data access auditing API, которое поможет понять что и когда используется.
Думаю, что для большинства приложений всё останется так, как и есть сейчас, ведь уже давно мы запрашиваем только те разрешения, которые действительно нужны.
#security #android
В Android 12 добавилась интересная для пользователя фича — Pricacy Dashboard. С каждой версией добавляются всё новые и новые инструменты для защиты приватности пользователей, и вот теперь каждый может посмотреть, какое приложение и когда использовало локацию, микрофон и камеру за последние сутки.
Для разработчиков это означает то, что они должны будут проверить свои приложения на предмет реальной нужды использования тех или иных данных от пользователя. В том числе и использование сторонними библиотеками.
Чуть раньше было представлено Data access auditing API, которое поможет понять что и когда используется.
Думаю, что для большинства приложений всё останется так, как и есть сейчас, ведь уже давно мы запрашиваем только те разрешения, которые действительно нужны.
Обновление зависимостей gradle
#gradle
В
Есть классное решение, где проверкой зависимостей будет заниматься плагин. После подключения плагина к проекту, станет доступна команда, которая выведет список зависимостей для обновления в файл.
А дальше всю работу можно вынести на какой-нибудь Github Actions, что добавит ещё больше автоматизации в процесс.
Автор статьи так и сделал, а ещё добавил отправку отчёта на почту. Получилось круто, остаётся только пробежаться по зависимостям и проверить, что проект корректно собирается.
#gradle
В
gradle
у нас есть удобная фича, которая показывает предупреждение о том, что доступна новая версия зависимости. Однако, если использоваться Kotlin DSL, то такие предупреждения могут не появляться, так что обновлять зависимости довольно сложно. Есть классное решение, где проверкой зависимостей будет заниматься плагин. После подключения плагина к проекту, станет доступна команда, которая выведет список зависимостей для обновления в файл.
А дальше всю работу можно вынести на какой-нибудь Github Actions, что добавит ещё больше автоматизации в процесс.
Автор статьи так и сделал, а ещё добавил отправку отчёта на почту. Получилось круто, остаётся только пробежаться по зависимостям и проверить, что проект корректно собирается.
Jetpack Compose vs SwiftUI
#compose #kmm
Неплохая статья, где автор делится своими наблюдениями о различиях в Jetpack Compose и SwiftUI.
Кроме того, он поделился двумя версиями одного и того же приложения: под Android и iOS.
Статья будет полезна в случаях, если вы работаете над приложениями под KMM и хотите больше понять особенности работы двух платформ, а также если вы просто хотите разобраться, как работает противоположная платформа и где какие вещи сделать проще и удобнее.
#compose #kmm
Неплохая статья, где автор делится своими наблюдениями о различиях в Jetpack Compose и SwiftUI.
Кроме того, он поделился двумя версиями одного и того же приложения: под Android и iOS.
Статья будет полезна в случаях, если вы работаете над приложениями под KMM и хотите больше понять особенности работы двух платформ, а также если вы просто хотите разобраться, как работает противоположная платформа и где какие вещи сделать проще и удобнее.
Paging из сети и базы данных
#room #jetpack
Хорошая статья, где рассказывается о реализации распространённого получения данных при помощи
Идея заключается в том, что мы всегда получаем данные из базы данных, сразу же отображаем пользователю, а дальше обновляем их из сети, когда пора обновить и есть соединение.
В
#room #jetpack
Хорошая статья, где рассказывается о реализации распространённого получения данных при помощи
Paging3
из Jetpack. Идея заключается в том, что мы всегда получаем данные из базы данных, сразу же отображаем пользователю, а дальше обновляем их из сети, когда пора обновить и есть соединение.
В
Paging3
есть все нужные инструменты: и работа из коробки в Room, и различные типы Mediator, и поддержка состояний загрузки или ошибки.Изучаем папку .idea in Android
#android
При создании нового проекта, автоматически создаётся папка
Но на самом деле, некоторые компоненты из этой папки стоит оставить, а некоторые можно время от времени удалять, чтобы сэкономить место на диске.
Автор статьи решил разобраться со структурой этой «магической» папки и описал, за что отвечает каждый из файлов.
Например, автор рекомендует включать в
#android
При создании нового проекта, автоматически создаётся папка
.idea
, которая часто автоматически попадает в .gitignore
. Но на самом деле, некоторые компоненты из этой папки стоит оставить, а некоторые можно время от времени удалять, чтобы сэкономить место на диске.
Автор статьи решил разобраться со структурой этой «магической» папки и описал, за что отвечает каждый из файлов.
Например, автор рекомендует включать в
.gitignore
папки caches, libraries и modules, но при этом оставить в проекте codeStyles, dictionaries, fileTemplates и парочку других.Support Modern Emoji
#design
Emoji сегодня — довольно важная часть, которая используется повсеместно, будь то чаты или просто текстовые поля. Однако, не все emoji одинаково отображаются на всех устройствах.
Если мы говорим про более старые гаджеты, то вместо красивой иконки мы может получить просто квадрат. А ещё, мало кто задумывается, что комбинация из 2 и более emoji может давать новую.
Любопытная статья, которая рассказывает об отображении emoji в текстовых полях. На самом деле, есть целая библиотека, которая помогает отобразить emoji на старых устройствах, начиная с API 19. Она интегрирована в AppCompat 1.4, поэтому вам не нужно ничего докручивать.
Но очень круто почитать, как это работает под капотом и о том, что происходит если вводить emoji в текстовые поля.
#design
Emoji сегодня — довольно важная часть, которая используется повсеместно, будь то чаты или просто текстовые поля. Однако, не все emoji одинаково отображаются на всех устройствах.
Если мы говорим про более старые гаджеты, то вместо красивой иконки мы может получить просто квадрат. А ещё, мало кто задумывается, что комбинация из 2 и более emoji может давать новую.
Любопытная статья, которая рассказывает об отображении emoji в текстовых полях. На самом деле, есть целая библиотека, которая помогает отобразить emoji на старых устройствах, начиная с API 19. Она интегрирована в AppCompat 1.4, поэтому вам не нужно ничего докручивать.
Но очень круто почитать, как это работает под капотом и о том, что происходит если вводить emoji в текстовые поля.
Android CI/CD: GitLab + Slack bot
#cicd
Интересная связка для автоматизации сбора билдов, описанная в статье. Автор решил дать возможность выбрать любую ветку для сборки, собирая её на встроенной в GitLab CI/CD.
Получилось довольно круто: любой может выбрать при помощи бота Slack ветку для сборки, будь то тестировщик, который хочет посмотреть определённую фичу или разработчик, который просто делает ежедневные сборки. 🤘
Кстати, а нет ли похожего бота в Telegram? Если знаете, то поделитесь в комментариях.
#cicd
Интересная связка для автоматизации сбора билдов, описанная в статье. Автор решил дать возможность выбрать любую ветку для сборки, собирая её на встроенной в GitLab CI/CD.
Получилось довольно круто: любой может выбрать при помощи бота Slack ветку для сборки, будь то тестировщик, который хочет посмотреть определённую фичу или разработчик, который просто делает ежедневные сборки. 🤘
Кстати, а нет ли похожего бота в Telegram? Если знаете, то поделитесь в комментариях.
Релиз Kotlin 1.6.0
#kotlin
Состоялся релиз Kotlin 1.6.0, в котором появилось несколько изменений:
1️⃣ exhaustive when — долгожданная фича, суть которой в подсветке новых enum и sealed при их использовании в операторе
То есть теперь компилятор будет выдавать ошибку, если вы возвращаете тип, который не описали в
2️⃣ Изменения в поддержке suspend-функций — стало ещё удобнее работать с suspend-функциями, их работа стала аналогична обычным функциям. Лучше посмотреть пример того, как эти штуки работают тут.
3️⃣ Можно попробовать новую версию менеджера памяти — больше деталей тут. Обещают заметно улучшить разработку проектов на KMM, ведь менеджер уберёт проблемы, связанные с доступом к объектам из разных потоков, и теперь не придётся управлять этими процессами вручную.
Ну и ещё пару мелких изменений с билдерами, операторами и Kotlin/JS. Обо всех изменениях читайте в релизе. 😉
#kotlin
Состоялся релиз Kotlin 1.6.0, в котором появилось несколько изменений:
1️⃣ exhaustive when — долгожданная фича, суть которой в подсветке новых enum и sealed при их использовании в операторе
when
. То есть теперь компилятор будет выдавать ошибку, если вы возвращаете тип, который не описали в
when
и пока что выдавать warning, если просто выполняете when
в функции. С 1.7.0 там тоже будет ошибка. 2️⃣ Изменения в поддержке suspend-функций — стало ещё удобнее работать с suspend-функциями, их работа стала аналогична обычным функциям. Лучше посмотреть пример того, как эти штуки работают тут.
3️⃣ Можно попробовать новую версию менеджера памяти — больше деталей тут. Обещают заметно улучшить разработку проектов на KMM, ведь менеджер уберёт проблемы, связанные с доступом к объектам из разных потоков, и теперь не придётся управлять этими процессами вручную.
Ну и ещё пару мелких изменений с билдерами, операторами и Kotlin/JS. Обо всех изменениях читайте в релизе. 😉
👍1
Тайный Санта 🎅
#android_live
Уже минул экватор ноября, а это значит – пора начинать готовиться к Новому Году!
В этом году захотелось попробовать на канале новую, но широко известную тему с Тайным Сантой.
Каждый из вас может поучаствовать в этой игре (где нет проигравших 🎁), условия очень просты:
1️⃣ Зарегистрироваться по ссылке на специальном ресурсе, который автоматически распределит участников
2️⃣ Быть готовым принять и отправить подарок: сумма подарка составляет ~800 рублей.
В целом, это всё. Приём участников начинается сегодня и заканчивается 30 ноября, после чего будет автоматическая жеребьёвка.
Подарки получать всегда приятно, да и новогоднее настроение само себя не создаст 😉 Поэтому, переходим по ссылке и участвуем вместе с нами.
Вопросы можете писать в комментариях, или мне в личку.🎄
#android_live
Уже минул экватор ноября, а это значит – пора начинать готовиться к Новому Году!
В этом году захотелось попробовать на канале новую, но широко известную тему с Тайным Сантой.
Каждый из вас может поучаствовать в этой игре (где нет проигравших 🎁), условия очень просты:
1️⃣ Зарегистрироваться по ссылке на специальном ресурсе, который автоматически распределит участников
2️⃣ Быть готовым принять и отправить подарок: сумма подарка составляет ~800 рублей.
В целом, это всё. Приём участников начинается сегодня и заканчивается 30 ноября, после чего будет автоматическая жеребьёвка.
Подарки получать всегда приятно, да и новогоднее настроение само себя не создаст 😉 Поэтому, переходим по ссылке и участвуем вместе с нами.
Вопросы можете писать в комментариях, или мне в личку.🎄
DI.kt — фреимворк для KMM
#kmm #library
Тут ребята из Wrike выложили один из первых DI-фреимворков для KMM — DI.kt.
Если вы не понимаете, зачем нужна ещё одна библиотека для DI (ведь есть Koin или Kodein), то ответ — отсутствие compile-time валидации, ведь текущие библиотеки представляют из себя service locators.
Для имногих подобная валидация является критически важной, поэтому можно рассмотреть эту библиотеку в будущих проектах.
Да, пока она alpha, поэтому стоит пользоваться ей только в своих проектах.
Ссылка на то, как её использовать тут, API выглядит простым. 🤞🏻
#kmm #library
Тут ребята из Wrike выложили один из первых DI-фреимворков для KMM — DI.kt.
Если вы не понимаете, зачем нужна ещё одна библиотека для DI (ведь есть Koin или Kodein), то ответ — отсутствие compile-time валидации, ведь текущие библиотеки представляют из себя service locators.
Для имногих подобная валидация является критически важной, поэтому можно рассмотреть эту библиотеку в будущих проектах.
Да, пока она alpha, поэтому стоит пользоваться ей только в своих проектах.
Ссылка на то, как её использовать тут, API выглядит простым. 🤞🏻
Удобный Permissions Manager
#library
Почти все сегодняшние приложения под Android запрашивают и обрабатывают Permissions.
На мой взгляд, первая имплементация для запроса разрешений была не самая удачная. Ведь надо было прописывать
Но на днях решил посмотреть, а насколько тяжело сейчас реализовать получение «пермишенов» и что изменилось. И к счастью, нашёлся крутой вариант, позволяющий добавить реализацию буквально в несколько строк кода.
Для запроса нам надо зарегистрировать
Я тут добавил немного «магии» Kotlin, причесав всё делегатами и получилось ещё удобнее, можете ознакомиться тут.
Так что теперь смело можно выкинуть ещё одну либу из проекта.
#library
Почти все сегодняшние приложения под Android запрашивают и обрабатывают Permissions.
На мой взгляд, первая имплементация для запроса разрешений была не самая удачная. Ведь надо было прописывать
onActivityResult
для получения результата и полная реализация получения была громоздкой. Тогда и стали активно появляться различные обёртки библиотеки, которые заметно упрощают получение разрешений. Но на днях решил посмотреть, а насколько тяжело сейчас реализовать получение «пермишенов» и что изменилось. И к счастью, нашёлся крутой вариант, позволяющий добавить реализацию буквально в несколько строк кода.
Для запроса нам надо зарегистрировать
requestPermissionLauncher
и вызвать: requestPermissionLauncher.launch(Manifest.permission.REQUESTED_PERMISSION)
с нужным разрешением. В итоге получаем:val requestPermissionLauncher =
registerForActivityResult(RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
// Permission is granted.
} else {
// Permission is denied.
}
}
Я тут добавил немного «магии» Kotlin, причесав всё делегатами и получилось ещё удобнее, можете ознакомиться тут.
Так что теперь смело можно выкинуть ещё одну либу из проекта.
Общение между Fragments
#fragment
Довольно частой задачей в приложении, которое использует
Можно встретить множество подходов для решения этой задачи, начиная от создания интерфейса для передачи, использования классов-хелперов до создания общей
1️⃣ Добавьте
2️⃣ Вызовите
И на этом всё. Главное следите за
Чуть больше кода можно найти тут.
#fragment
Довольно частой задачей в приложении, которое использует
Fragments
является передача данных из одного фрагмента в другой. Можно встретить множество подходов для решения этой задачи, начиная от создания интерфейса для передачи, использования классов-хелперов до создания общей
ViewModel
. Но на самом деле, не так давно появился куда более простой и удобный способ. Если вы его ещё не используете, то настало то самое время.1️⃣ Добавьте
setFragmentResultListener()
в том фрагменте, где вы хотите слушать результат. 2️⃣ Вызовите
setFragmentResult("requestKey", bundleOf("bundleKey" to result))
в том фрагменте, где хотите отправить результат.И на этом всё. Главное следите за
FragmentManager
, и если вам не пришёл результат, то проверьте, правильно ли вы вызываете показ этого фрагмента.Чуть больше кода можно найти тут.
👍1
Релиз Compose Multiplatform
#compose
Отличная новость от ребят из JetBrains — Compose Multiplatform, который позволяет писать UI на десктоп и web, готов к production коду! Или же просто зарелизился.
Хорошая новость заключается в том, что по большей части он совместим с Jetpack Compose, поэтому можно делать свой код сразу на три платформы.
Подробнее можно почитать тут.
#compose
Отличная новость от ребят из JetBrains — Compose Multiplatform, который позволяет писать UI на десктоп и web, готов к production коду! Или же просто зарелизился.
Хорошая новость заключается в том, что по большей части он совместим с Jetpack Compose, поэтому можно делать свой код сразу на три платформы.
Подробнее можно почитать тут.
This media is not supported in your browser
VIEW IN TELEGRAM
А уже завтра 4 декабря состоится крутая онлайн-конференция — DevFest Russia 2021, которую организуют сообщества GDG из разных городов России.
Планируется три потока: Web, Mobile и Cloud, а спикерами будут опытные Google Developer Experts, которые поделятся докладами на различные, актуальные темы.
Конференция на русском языке. ✌🏻Обязательно присоединяйтесь на Mobile-поток, где я буду модерировать.
Ссылка на трансляции тут, а сам список докладов — тут. 💪
#conference
Планируется три потока: Web, Mobile и Cloud, а спикерами будут опытные Google Developer Experts, которые поделятся докладами на различные, актуальные темы.
Конференция на русском языке. ✌🏻Обязательно присоединяйтесь на Mobile-поток, где я буду модерировать.
Ссылка на трансляции тут, а сам список докладов — тут. 💪
#conference