Если вам нужно готовое решение для навигации, то есть интересный вариант.
Odyssey — декларативная мультиплатформенная навигационная библиотека для Multiplatform Compose. В комплекте идет подробная инструкция: как запустить, что настроить и прочие советы.
Для быстрого старта в gradle понадобится добавить две строки:
implementation("io.github.alexgladkov:odyssey-core:1.3.20")
implementation("io.github.alexgladkov:odyssey-compose:1.3.20")
Создать каркас навигации:
fun RootComposeBuilder.navigationGraph() {
screen("splash") { SplashScreen() }
screen("login") { LoginScreen() }
screen("main") { MainScreen() }
}
Установить RootController:
setContent {
val configuration = OdysseyConfiguration(canvas = this)
setNavigationContent(configuration) {
navigationGraph()
}
}
Пользоваться:
@Composable
fun SplashScreen() {
val rootController = LocalRootController.current
rootController.push("login")
}
Подробнее здесь
Odyssey — декларативная мультиплатформенная навигационная библиотека для Multiplatform Compose. В комплекте идет подробная инструкция: как запустить, что настроить и прочие советы.
Для быстрого старта в gradle понадобится добавить две строки:
implementation("io.github.alexgladkov:odyssey-core:1.3.20")
implementation("io.github.alexgladkov:odyssey-compose:1.3.20")
Создать каркас навигации:
fun RootComposeBuilder.navigationGraph() {
screen("splash") { SplashScreen() }
screen("login") { LoginScreen() }
screen("main") { MainScreen() }
}
Установить RootController:
setContent {
val configuration = OdysseyConfiguration(canvas = this)
setNavigationContent(configuration) {
navigationGraph()
}
}
Пользоваться:
@Composable
fun SplashScreen() {
val rootController = LocalRootController.current
rootController.push("login")
}
Подробнее здесь
👍2🥱1
Kiosk (Lock task mode) для Android: польза, кейсы применения и кастомизация
🏚️🏚️ Есть такое понятие, как Mobile device management — технологий для управления поведением устройств. О ее применении в iOS можно прочитать здесь, а про использование в Android — здесь.
В статье разбирается один из режимов этого механизма — Lock task mode (Kiosk-режим).
Коротко — этот режим блокирует какую-либо активность пользователя приложения т. е. выйти на хоум-скрин или открыть шторку с настройками нельзя. И даже доступ к другим приложениям запрещен. Это часто нужно для девайсов, которые используются только для одной конкретно цели:
➖ цифровая вывеска компании;
➖ демонстрационный стенд;
➖ вендинг-автомат;
➖ автомат для заказа еды/товаров (как в популярной сети питания);
➖ и еще масса вариантов.
📱📲Для реализации API используется класс DevicePolicyManager и его метода DevicePolicyManager.setLockTaskPackages(), в параметры которого следует передать ComponentName и список, состоящий из строк с указанием package name приложений, которые должны быть доступны в рамках Lock Task mode. Если нужно получить список таких приложений — юзаем метод DevicePolicyManager.getLockTaskPackages().
Все подробности тут
🏚️🏚️ Есть такое понятие, как Mobile device management — технологий для управления поведением устройств. О ее применении в iOS можно прочитать здесь, а про использование в Android — здесь.
В статье разбирается один из режимов этого механизма — Lock task mode (Kiosk-режим).
Коротко — этот режим блокирует какую-либо активность пользователя приложения т. е. выйти на хоум-скрин или открыть шторку с настройками нельзя. И даже доступ к другим приложениям запрещен. Это часто нужно для девайсов, которые используются только для одной конкретно цели:
➖ цифровая вывеска компании;
➖ демонстрационный стенд;
➖ вендинг-автомат;
➖ автомат для заказа еды/товаров (как в популярной сети питания);
➖ и еще масса вариантов.
📱📲Для реализации API используется класс DevicePolicyManager и его метода DevicePolicyManager.setLockTaskPackages(), в параметры которого следует передать ComponentName и список, состоящий из строк с указанием package name приложений, которые должны быть доступны в рамках Lock Task mode. Если нужно получить список таких приложений — юзаем метод DevicePolicyManager.getLockTaskPackages().
Все подробности тут
👍2🔥1
😎 Очередной #дайджест полезных статей по мобильной разработке:
👉 Flutter с поддержкой платформы ОС Аврора
👉 Продаём тимлиду идею Server/Backend-Driven UI — зачем он вообще нужен и как с ним работать
👉 Как правильно обучаться, загрузка файлов и как войти в IT — 3 докладчика с душещипательными темами
👉 Закругляем углы в iOS 17 и SwiftUI 5 с помощью Uneven Rounded Rectangle — как создать фигуру с конкретными закругленными углами в новом Swift-е
👉 Как изменить порядок элементов RecyclerView с помощью Kotlin — функционал drag & drop для RecyclerView
👉 KivyMD и разработка — хорошо выглядящее приложение на Python-фреймворке для кроссплатформенной разработки в стиле Google Material Design
👉 Flutter с поддержкой платформы ОС Аврора
👉 Продаём тимлиду идею Server/Backend-Driven UI — зачем он вообще нужен и как с ним работать
👉 Как правильно обучаться, загрузка файлов и как войти в IT — 3 докладчика с душещипательными темами
👉 Закругляем углы в iOS 17 и SwiftUI 5 с помощью Uneven Rounded Rectangle — как создать фигуру с конкретными закругленными углами в новом Swift-е
👉 Как изменить порядок элементов RecyclerView с помощью Kotlin — функционал drag & drop для RecyclerView
👉 KivyMD и разработка — хорошо выглядящее приложение на Python-фреймворке для кроссплатформенной разработки в стиле Google Material Design
❤2
Шаблоны кода Android Studio для экономии времени программирования
В студии уже есть несколько шаблонов для Kotlin и Jetpack Compose: void, fun0, fun1, fun2 — создание функции с требуемым количеством параметров или prevCol — создание коллекции compose previews.
Можно создавать и свои шаблоны: File → Settings → Editor → Live Templates.
Нажав «+» в правом верхнем углу, вы сможете добавить свою группу шаблонов или шаблон в существующую категорию.
Если вы добавляете новый шаблон, контекст должен быть определен в левом нижнем углу желтым предупреждающим знаком. Создавать можно не только для Kotlin — набор языков велик: Java, Dart, Gradle или что-нибудь еще.
Читать
#новость
В студии уже есть несколько шаблонов для Kotlin и Jetpack Compose: void, fun0, fun1, fun2 — создание функции с требуемым количеством параметров или prevCol — создание коллекции compose previews.
Можно создавать и свои шаблоны: File → Settings → Editor → Live Templates.
Нажав «+» в правом верхнем углу, вы сможете добавить свою группу шаблонов или шаблон в существующую категорию.
Если вы добавляете новый шаблон, контекст должен быть определен в левом нижнем углу желтым предупреждающим знаком. Создавать можно не только для Kotlin — набор языков велик: Java, Dart, Gradle или что-нибудь еще.
Читать
#новость
👍4
🔥 Вышел в свет SwiftUI Cookbook 🧑🍳
Это справочник по общим шаблонам создания пользовательских интерфейсов в SwiftUI, к которым вы можете быстро обращаться при написании кода.
Для кого?
Для всех, кто пишет код SwiftUI и хочет быстро вспомнить определенный синтаксис или технику. Каждый раздел является независимым — не придется листать раздел до конца, чтобы перейти к следующему.
Что внутри?
Рассматриваются общие проблемы, которые приходится решать при разработке пользовательских интерфейсов и макета.
Начать чтение
#новость
Это справочник по общим шаблонам создания пользовательских интерфейсов в SwiftUI, к которым вы можете быстро обращаться при написании кода.
Для кого?
Для всех, кто пишет код SwiftUI и хочет быстро вспомнить определенный синтаксис или технику. Каждый раздел является независимым — не придется листать раздел до конца, чтобы перейти к следующему.
Что внутри?
Рассматриваются общие проблемы, которые приходится решать при разработке пользовательских интерфейсов и макета.
Начать чтение
#новость
🔥3👍1
💉 💉 🤖 Kodein DI для Android
В мире DI (dependency injection) есть Dagger 2, Hilt или Koin. Есть еще Kodein ‼️
Он создавался изначально как DI для Kotlin (в то время для Android все DI были написаны на Java). Отсюда он и получил своё название — KOtlin DEpendency INjection. Поэтому за основы были взяты новые возможности, которые давал Kotlin, в отличие от Java:
➖ декларативный DSL,
➖inline функции и reified типы,
➖ infix функции.
Кто же он: DI или Service Locator
Service Locator — это паттерн, когда мы запрашиваем и получаем зависимости.
DI — это паттерн, когда наши классы получают зависимости откуда-то извне.
Опираясь на официальную доку, Kodein — это все вместе:
👉 если мы инджектим зависимости, то у нас режим Injection (DI);
👉 если мы запрашиваем и получаем зависимости, то у нас режим Retrieval (Service Locator)
Хотите подробностей? Вот!
#новость
В мире DI (dependency injection) есть Dagger 2, Hilt или Koin. Есть еще Kodein ‼️
Он создавался изначально как DI для Kotlin (в то время для Android все DI были написаны на Java). Отсюда он и получил своё название — KOtlin DEpendency INjection. Поэтому за основы были взяты новые возможности, которые давал Kotlin, в отличие от Java:
➖ декларативный DSL,
➖inline функции и reified типы,
➖ infix функции.
Кто же он: DI или Service Locator
Service Locator — это паттерн, когда мы запрашиваем и получаем зависимости.
DI — это паттерн, когда наши классы получают зависимости откуда-то извне.
Опираясь на официальную доку, Kodein — это все вместе:
👉 если мы инджектим зависимости, то у нас режим Injection (DI);
👉 если мы запрашиваем и получаем зависимости, то у нас режим Retrieval (Service Locator)
Хотите подробностей? Вот!
#новость
👍6❤1🥰1🥱1
В веселенькой форме познаем синглтон 😂
Синглтон гарантирует, что у определенного класса есть только один экземпляр, и предоставляет способ доступа к его экземпляру из любой точки кода. Это может показаться тривиальным, но возможности, которыми он обладает для последовательного поддержания состояния в разных частях приложения, часто бывают очень крутыми.
Ничего не понятно 😂😂 Поймем лучше на примере.
У вас есть универсальный пульт дистанционного управления (Singleton), управляющий всеми электронными девайсами в доме. Вам не понадобятся отдельные пульты (экземпляры) для каждого устройства, и где бы вы ни находились, вы знаете, что есть только один пульт (экземпляр), который нужно искать.
Преимущества синглтона 🌟
🔹 Общий доступ: Любая часть вашего приложения может получить доступ к Singleton.
🔹 Управление состоянием: Если бы наш универсальный пульт дистанционного управления имел функцию «last-used», он был бы последовательным, независимо от того, кто обращался к нему последним.
🔹 Управление ресурсами: Иногда создание нескольких экземпляров может быть дорогостоящим. С синглтонами вы управляете только одним.
Подробнее читаем здесь
Синглтон гарантирует, что у определенного класса есть только один экземпляр, и предоставляет способ доступа к его экземпляру из любой точки кода. Это может показаться тривиальным, но возможности, которыми он обладает для последовательного поддержания состояния в разных частях приложения, часто бывают очень крутыми.
Ничего не понятно 😂😂 Поймем лучше на примере.
У вас есть универсальный пульт дистанционного управления (Singleton), управляющий всеми электронными девайсами в доме. Вам не понадобятся отдельные пульты (экземпляры) для каждого устройства, и где бы вы ни находились, вы знаете, что есть только один пульт (экземпляр), который нужно искать.
Преимущества синглтона 🌟
🔹 Общий доступ: Любая часть вашего приложения может получить доступ к Singleton.
🔹 Управление состоянием: Если бы наш универсальный пульт дистанционного управления имел функцию «last-used», он был бы последовательным, независимо от того, кто обращался к нему последним.
🔹 Управление ресурсами: Иногда создание нескольких экземпляров может быть дорогостоящим. С синглтонами вы управляете только одним.
Подробнее читаем здесь
👍4
🔍Насколько легко «войти в айти»?
IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.
👉Пройдите наш 10-минутный опрос по ссылке.
IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.
👉Пройдите наш 10-минутный опрос по ссылке.
👍1
Jetpack Compose: осваиваем состояния
Состояние в Jetpack Compose — это то, с чем приходится сталкиваться примерно в 90% случаев в проектах, поэтому важно иметь представление, что это, и с чем его едят.
MutableState — это интерфейс, который содержит значение, которое можно изменить. Этот объект запускает рекомпозицию при изменении значения. Когда появляется новое значение, он проверяет, изменилось ли новое значение структурно — отличаются ли свойства старого объекта от свойств нового.
Всю эту деятельность можно контролировать:
➖ structuralEqualityPolicy() - распознает изменения, основанные на структурных изменениях объекта.
➖ neverEqualPolicy() - сравнивает отличия старого и нового объектов
➖ referentialEqualityPolicy() - учитывает изменение, если ссылка на память старого объекта отличается от ссылки на память нового.
#новость
Состояние в Jetpack Compose — это то, с чем приходится сталкиваться примерно в 90% случаев в проектах, поэтому важно иметь представление, что это, и с чем его едят.
MutableState — это интерфейс, который содержит значение, которое можно изменить. Этот объект запускает рекомпозицию при изменении значения. Когда появляется новое значение, он проверяет, изменилось ли новое значение структурно — отличаются ли свойства старого объекта от свойств нового.
Всю эту деятельность можно контролировать:
➖ structuralEqualityPolicy() - распознает изменения, основанные на структурных изменениях объекта.
➖ neverEqualPolicy() - сравнивает отличия старого и нового объектов
➖ referentialEqualityPolicy() - учитывает изменение, если ссылка на память старого объекта отличается от ссылки на память нового.
#новость
👍7
😱 Как выйти из IT: опасный бизнес 💣
По каким критериям оценивается программист? Что хочет бизнес? Как просить повышения? Когда стоит увольняться? Как быстро расти в компании?
Вышел новый видос-интервью Гладкова.
Это видео не для новичков. Оно для тех, кто уже все познал в мире программирования и хочет двигаться дальше. Но также оно и для новичков, потому что позволит вам взглянуть на ваше дело глазами другой стороны, глазами человека, который был программистом, а теперь думает как бизнесмен.
#новость
По каким критериям оценивается программист? Что хочет бизнес? Как просить повышения? Когда стоит увольняться? Как быстро расти в компании?
Вышел новый видос-интервью Гладкова.
Это видео не для новичков. Оно для тех, кто уже все познал в мире программирования и хочет двигаться дальше. Но также оно и для новичков, потому что позволит вам взглянуть на ваше дело глазами другой стороны, глазами человека, который был программистом, а теперь думает как бизнесмен.
#новость
👍1
🚙🚙 Подъехал очень познавательный материал по основам алгоритмов.
Это отличный вариант подтянуть знания, которые точно пригодятся на собесе, да и в работе 100%.
Штука эта интерактивная, состоящая из секций с чекбоксами. Некоторые из тем: техники проектирования алгоритмов, решение практических задач по программированию, последовательные алгоритмы и далее по списку.
Рекомендуем ознакомиться 👍
#новость
Это отличный вариант подтянуть знания, которые точно пригодятся на собесе, да и в работе 100%.
Штука эта интерактивная, состоящая из секций с чекбоксами. Некоторые из тем: техники проектирования алгоритмов, решение практических задач по программированию, последовательные алгоритмы и далее по списку.
Рекомендуем ознакомиться 👍
#новость
👍7
😎 Очередной #дайджест полезных статей по мобильной разработке
👉 Как получить работу в Apple без колледжа и LeetCode — реалистичная история попавшего в I-чертоги, без всяких «я не спал, прошел курс и теперь я тут»
👉 Как не забросить свой пет-проект. Мой кейс запуска приложения в App Store — как замотивироваться на долгострой (и не сдуться) с помощью посторонних
👉 Скрипт для автоматической сборки Android-приложений — запускаем скрипт (с сигнатурой ключа Google Play) из командной строки и ждем. Класс, же?!
👉 Одно PWA, чтоб править всеми —- зачем писать PWA, если есть нативные приложения? Практика-практика-практика
👉 Фишки React Native для реализации личного кабинета — создание интерфейса с прослушиванием аудиозаписей с помощью React Native Track Player и графиками на Bridge
👉 Миграция приложения на Jetpack Compose — объемный материал про подводные камни, возможности и стратегии миграции UI, архитектуры и дизайн-системы
👉 Как получить работу в Apple без колледжа и LeetCode — реалистичная история попавшего в I-чертоги, без всяких «я не спал, прошел курс и теперь я тут»
👉 Как не забросить свой пет-проект. Мой кейс запуска приложения в App Store — как замотивироваться на долгострой (и не сдуться) с помощью посторонних
👉 Скрипт для автоматической сборки Android-приложений — запускаем скрипт (с сигнатурой ключа Google Play) из командной строки и ждем. Класс, же?!
👉 Одно PWA, чтоб править всеми —- зачем писать PWA, если есть нативные приложения? Практика-практика-практика
👉 Фишки React Native для реализации личного кабинета — создание интерфейса с прослушиванием аудиозаписей с помощью React Native Track Player и графиками на Bridge
👉 Миграция приложения на Jetpack Compose — объемный материал про подводные камни, возможности и стратегии миграции UI, архитектуры и дизайн-системы
👍2
Сколько времени вы уделяете обучению?
Anonymous Poll
32%
1-3 часа в день
23%
Пару часов в неделю
4%
Не обучаюсь я уже - достаточно!
7%
Более 4 часов в день
31%
После работы ничего не хочется
4%
Свой вариант
🤔3🎉1
Делаем бизнес на опенсорсе
Видос с основателем крупной компании, который расскажет о своем пути из команды MySQL, в свое дело, которое успешно функционирует до сих пор.
Все развивалось, казалось бы, по одному пути: получил опыт, создал блог, создал компанию, реклама компании в блоге — все стандартно, но история хорошо выстрелила и из нее можно почерпнуть что-то полезное.
Смотреть
#новость
Видос с основателем крупной компании, который расскажет о своем пути из команды MySQL, в свое дело, которое успешно функционирует до сих пор.
Все развивалось, казалось бы, по одному пути: получил опыт, создал блог, создал компанию, реклама компании в блоге — все стандартно, но история хорошо выстрелила и из нее можно почерпнуть что-то полезное.
Смотреть
#новость
❤1👍1
🕹️Наткнулись мы тут на создание красивой анимированной кнопки авторизации на SwiftUI и делимся с вами видосиком.
Создание крутой кнопки
Создание крутой кнопки
❤3
❗Ищем копирайтера
Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.
Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).
Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.
Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.
👉Присылайте свои резюме: hello@proglib.io
Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.
Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).
Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.
Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.
👉Присылайте свои резюме: hello@proglib.io
❤3🤔3
По ту сторону фидбека: как проходят Android-собеседования
Всем понятно, что одна сторона этого действа ищет команду, где научится чему-то, вырастет в крутого специалиста, а другая — плечо, на которое можно положиться и доверить задачи.
Любой современный собес проходит в несколько этапов, а бывает и в несколько подходов. Про всю эту кухню подробно расскажут в этом материале. Будет интересно 🧑🍳
#новость
Всем понятно, что одна сторона этого действа ищет команду, где научится чему-то, вырастет в крутого специалиста, а другая — плечо, на которое можно положиться и доверить задачи.
Любой современный собес проходит в несколько этапов, а бывает и в несколько подходов. Про всю эту кухню подробно расскажут в этом материале. Будет интересно 🧑🍳
#новость
❤2
🚒🚒🚒 Оперативно подвезли новый Kotlin 1.9.10
Пофиксили много багов, среди них, самые интересные:
В компиляторе:
KT-60659 unresolved reference: addFirst в JDK 21
KT-60986 Статические кеши в рантайме на Linux
KT-60231 NoClassDefFoundError: $$$$$NON_LOCAL_RETURN$$$$$ после обновы до 1.9.0
Gradle:
KT-61147 Компилятор 1.9.0 и Gson
KT-60543 NoClassDefFoundError для com/gradle/scan/plugin/BuildScanExtension
Native:
KT-60230 "unknown options: -ios_simulator_version_min -sdk_version" на Xcode 15 beta 3
KT-60758 'iOS-simulator' в dylib сборке для 'iOS' в Xcode 15 beta 4
#новость
Пофиксили много багов, среди них, самые интересные:
В компиляторе:
KT-60659 unresolved reference: addFirst в JDK 21
KT-60986 Статические кеши в рантайме на Linux
KT-60231 NoClassDefFoundError: $$$$$NON_LOCAL_RETURN$$$$$ после обновы до 1.9.0
Gradle:
KT-61147 Компилятор 1.9.0 и Gson
KT-60543 NoClassDefFoundError для com/gradle/scan/plugin/BuildScanExtension
Native:
KT-60230 "unknown options: -ios_simulator_version_min -sdk_version" на Xcode 15 beta 3
KT-60758 'iOS-simulator' в dylib сборке для 'iOS' в Xcode 15 beta 4
#новость
🔥3
Вопрос по Kotlin
#вопросы_с_собеседований
Что такое reified?
...............................................................................................................
reified — это ключевое слово, которое может быть использовано только в inline-функциях. reified позволяет получить информацию о типе generic-параметра во время выполнения программы. В обычном случае, информация о типах стирается и недоступна во время выполнения, но с помощью reified можно сохранять эту информацию и использовать в других частях приложения.
#вопросы_с_собеседований
Что такое reified?
...............................................................................................................
👍5🌚3❤1👾1