Разработка Flutter — плагина под Android

Доброго времени суток! Flutter, имеет большое коммьюнити, огромное множество пакетов и плагинов, но всего не предусмотришь и, рано или поздно, разработчик сталкивается с задачей написания своего плагина, и сегодня рассмотрим как это сделать. Для примера возьмем несложный, но включающий многие аспекты разработки, плагин шаринга из приложения.
Читать →

Работа в фоне: iOS, Android, Flutter

Рано или поздно перед каждым мобильным разработчиком встает задача выполнить некоторую работу в фоне. Это может быть периодическая предварительная загрузка свежих материалов с сервера, синхронизация данных,  оптимизация работы локальной базы данных, необходимость завершить работу, начатую пользователем, взаимодействие с внешними аксессуарами, отслеживание геопозиции и многое другое. Как говорится, была бы возможность, а уж как ей воспользоваться, придумать не проблема. Если говорить о работе в фоне на десктоп платформах, то очевидно, что никаких проблем с этим там нет, разве что глаза разбегаются от разных возможностей реализации: начиная с запуска процесса в безоконном режиме, заканчивая реализацией служб или даже, при острой необходимости, драйверов. Одним словом, раздолье. В то же время мобильные платформы не могут похвастаться таким разнообразием. Оно и понятно: мобильность накладывает жесткое ограничение (емкость современных батарей, при учете прожорливости ОС и остального софта, оставляет желать лучшего).

Давайте рассмотрим основные возможности, которые нам предоставляют мобильные платформы в плане работы в фоне.

Читать →

Вы все еще эмулируете? Тогда мы идём к вам…

Скорость (да и качество) разработки прямо пропорциональна отзывчивости  и плавности системы, на которой эта самая разработка и ведется. Большинство мобильных разработчиков ежедневно на протяжении всего рабочего времени использует эмуляторы мобильных операционных систем. С одной стороны, эмуляторы позволяют значительно сократить  время в том плане, что при использовании эмулятора экономия происходит за счет ненужности заливки разрабатываемого приложения на реальное устройство, последующей его установки и запуска. А с другой стороны, эти же эмуляторы пожирают системные ресурсы, да порой так яростно, что о продуктивной работе речь вообще не идет. Самое время поговорить о том, можно ли что-то улучшить в подобной ситуации или нет. Если вы тоже задавались подобным вопросом, то добро пожаловать под кат.

Читать →

Вход через VK.com во Flutter приложении

В этой статье я попытаюсь дать подробные инструкции по подключению авторизации через ВКонтакте в ваше Flutter приложение.

Вход осуществляется с помощью VK SDK. Для добавления SDK в приложение будем использовать плагин flutter_login_vk с pub.dev. Плагин поддерживает iOS и Android.

Итак, начнем. Установите последнюю версию плагина для логина через VK, как указано на вкладке «Installing». Теперь можно двигаться дальше, для начала нам нужно создать приложение на VK.com.

Читать →

Hello OpenGL

Введение

В этой небольшой статье мы попробуем разработать простейшее приложение с использованием OpenGL. Мы будем использовать современную версию OpenGL (3.2+, так называемая modern OpenGL). В качестве основного языка программирования мы будем использовать C++ привкусом C. Проект будет основан на CMake, поэтому можно использовать любую IDE поддерживающую CMake проекты нативно (например, VS CE, CLion и другие), либо, можно сгенерировать проект для вашей IDE, используя утилиту CMake. Основной целевой платформой будет Windows (Win 10, но проблем с другими современными версиями этой ОС, по идее, быть не должно). Исходный код можно найти на репозитории.

Основная цель статьи — поближе познакомиться с низкоуровневой работой графической подсистемы и углубить знания для дальнейшего профессионального использования. Своего рода взгляд с другой стороны баррикад.

Лучший способ чему-то научиться – начать учить этому других (народная мудрость).

Disclaimer
  • еще одна статья об OpenGL;
  • с вероятностью 146% мною будут допущены те или иные ошибки, поэтому, конструктивная критика, правки и предложения приветствуются.

Читать →

Equals и GetHashCode в C# это сложно

Работать в C# с  Equals и  GetHashCode по многим причинам непросто, даже несмотря на наличие разного рода инструментов. Особенно по сравнению с тем, как это могло бы быть в нормально спроектированном ЯП, к которым, к большому сожалению, C#, в данном контексте, не относится.  Если вам интересно, что это за проблемы, для чего этот метод вообще нужен, почему этот механизм реализован именно так, а не как-то иначе, как можно было сделать лучше, то добро пожаловать под кат.

Читать →

Локализация Dart пакетов

При разработке пакета может возникнуть потребность добавить локализацию. Если вы используете для локализации пакет Intl, то вас ждёт неприятный сюрприз.

Проблема

Для того, чтобы реализовать Intl локализацию стандартным образом вы должны:

  • создать класс, содержащий строки для локализации, получаемые через Intl.message();
  • сгенерировать arb файлы на основе этого класса;
  • выполнить перевод и разместить arb файл для каждого языка;
  • сгенерировать код ( messages_*.dart файлы) на основе arb файлов;
  • объявить делегат локализации (который будет зарегистрирован в приложении) и реализовать функцию загрузки, которая выполнит initializeMessages()  из сгенерированного кода и вернёт экземпляр класса реализации.

Этот способ отлично работает в приложении, но имеет одно существенное ограничение: правильно обработан будет только первый вызов initializeMessages(). Все последующие вызовы не добавят строк в локализацию, если для указанной локали уже есть записи.

Читать →

Новые возможности C# 8

Прошло примерно пол года с момента выхода C# 8, думаем самое время кратко рассмотреть основные нововведения. И начнем мы, пожалуй, по идее, с самого значимого из них, а именно с Nullable reference types.

Nullable reference types

Если бы Microsoft и компания писали бы сочинение по русскому языку в 5-ом классе, то обязательно бы получили минус полбалла за тавтологию, причем  заслуженно. Дело в том, что reference types (ссылочные типы) по определению nullable, т.е. зануляемые, таким образом получается масло масляное. Кроме того, название этого функционала пересекается с уже имеющимся функционалом, а именно с Nullable value types. А так как эти возможности имеют мало общего , это приводит к небольшой неразберихе. И даже больше, не только названия пересекаются, но и синтаксис полностью идентичен, что с одной стороны, конечно, хорошо, но вот с другой… Основная цель этого нововведения — решить (а по факту получается «решить») крайне неприятную и старую, как мир, проблему The Billion Dollar Mistake, т.е. всем известную проблему с Null Pointer Exception. В современных и мейнстрим языках, на наш взгляд, подобной проблемы существовать не должно вовсе, но, по тем или иным причинам, большиство популярных языков программирования продолжают гордо нести дух старой школы, а вместе с тем и весь тот груз, с которым каждому разработчику приходится бороться ежедневно, как будто бы других проблем у разработчиков больше нет. Ошибки дизайнеров, допущенные при укладке фундамента в самом начале, и необходимость в обратной совместимости теперь и не дают шанса на исправление подобных ошибок на корню. Из-за чего мы и получаем то, что имеем, как бы грустно это ни было. Напомним, что первая версия C# вышла в далеком 2002 году. С учетом того, что текущая версия вышла в прошлом году, не трудно подсчитать, что на то, чтобы начать (подчеркнем, не побороть, а именно начать) бороться с проблемой, которой быть в принципе не должно, потребовалось невообразимых 17 лет.

Чтобы начать пользоваться Nullable Reference Types, необходимо одним из возможных способов включить эту функцию вручную. И если для старых проектов это оправдано, то почему не включить эту функцию для новых проектов? Остается только гадать. Активировать эту возможность можно как для проекта целиком, в свойствах проекта, так и для отдельно взятых файлов с помощью директивы  #nullable enable . Давайте рассмотрим несколько примеров.
Читать →

Пользовательский интерфейс в Unity #2 — RectTransform


Небольшое видео с объяснением компонента трансформации пользовательского интерфейса.

Everfest 2020. Нормально делай — нормально будет

29-го февраля и 1-го марта представители нашей компании побывали на it-фестивале Everfest, который проводился в Тамбове. Мероприятие было довольно интересным и нам хотелось бы поделиться впечатлениями о поездке.

Читать →