Pull to refresh
-1
0
Send message

Flutter Flavoring in a breeze

Reading time8 min
Views8K

Хотелось ли вам иметь несколько версий одного приложения?

Чтобы одной командой вы могли собрать приложение под определенное окружение?

Сталкивались ли вы с тем, что одновременно нельзя было установить несколько версий одного приложения на одном устройстве?

Всем привет!

Меня зовут Андрей!

И в этой статье я расскажу, как настроить сборку приложения для разных окружений.

Читать далее

Повышаем качество кода с Dart Code Metrics

Reading time8 min
Views7.9K

Dart Code Metrics — это инструмент статического анализа кода, который позволяет собирать метрики по коду и предоставляет дополнительные правила для анализатора. Основная задача — помогать разработчикам следить за качеством кода и улучшать его. В этой статье мы хотим поделиться возможностями инструмента с сообществом. Он помог нам в Wrike решить часть проблем на фронтенде, и, надеемся, поможет и вам.

Читать далее

Dart на сервере

Reading time5 min
Views9K

Недавно столкнулся с необходимостью написать REST API сервер на Dart. Оставим за рамками этой статьи почему и зачем это было надо, но первое с чем я столкнулся - выбор библиотек. Так уж сложилось, что я привык писать на NodeJS используя KoaJS в качестве веб сервера. Простая и удобная библиотека с кучей расширений для любой необходимости. А вот Dart в этом плане несколько подкачал. На момент поисков из "живых" пакетов на pub.dev был только shelf. Что-то отдаленно похожее, но по факту жутко неудобное. Неделю промучившись с оным, понял, надо писать свое, с блэкджеком... что-нибудь в стиле того же KoaJS.

Читать далее

Как работает Flutter

Reading time18 min
Views68K


Как Flutter работает на самом деле?


Что такое Widgets, Elements, BuildContext, RenderOject, Bindings?..


Сложность: Новичок


Вступление


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


Что же такое Widgets (виджеты), Elements (элементы), BuildContext? Почему Flutter быстрый? Почему иногда он работает не так, как ожидается? Что такое деревья и зачем они нужны?


В 95% случаев при написании приложения вы будете иметь дело только с виджетами, чтобы что-то отображать на экране или взаимодействовать с ним. Но неужели вы никогда не задумывались, как вся эта магия работает внутри? Как система узнает, когда обновить экран и какие части должны быть обновлены?


Содержание:


Читать дальше →

Как написать и опубликовать идеальный пакет для Flutter

Reading time8 min
Views6.6K

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

Перейти к делу

Ускоряем Dart. Нативно, недорого

Reading time6 min
Views5.6K

Релиз Dart 2.12 принёс, помимо всего прочего, поддержку FFI в стабильной версии, что позволит относительно легко добавить биндинги к своим любимым библиотекам, которые используют сишный ABI для экспорта. А это в том числе и Rust, Go, Swift и другие.

Но какой ценой?

Энтерпрайз разработка с нуля

Reading time21 min
Views10K


На днях у меня появилась довольно интересная идея для статьи, основанная на следующей предпосылке: на Хабре ни разу не рассказывали об организации энтерпрайз разработки "от и до". В плане совсем с нуля и хотя бы до комфортного минимума. За отправную точку я буду брать ситуацию полнейшего хаоса, когда какой-то код существует на машине единственного разработчика, нет системы контроля версий, нет тестовых сред, код объектов БД существует только внутри эталонной продуктивной базы данных, нет никаких процессов сборки и установки, контроля качества кода и так далее. Возможно читатель задастся вопросом "Такое бывает в 2020 году? Разве кто-то еще так разрабатывает?" и будете только отчасти правы. Предлагаю обсудить детали под катом.

Читать дальше →

Регулярные выражения (regexp) — основы

Reading time21 min
Views1.2M

Регулярные выражения (их еще называют regexp, или regex) — это механизм для поиска и замены текста. В строке, файле, нескольких файлах... Их используют разработчики в коде приложения, тестировщики в автотестах, да просто при работе в командной строке!

Чем это лучше простого поиска? Тем, что позволяет задать шаблон.

Например, на вход приходит дата рождения в формате ДД.ММ.ГГГГГ. Вам надо передать ее дальше, но уже в формате ГГГГ-ММ-ДД. Как это сделать с помощью простого поиска? Вы же не знаете заранее, какая именно дата будет.

Читать далее

WebAssembly: что и как

Reading time9 min
Views156K


Эта статья основана на моём выступлении на конференции ITSubbotnik, прошедшем 2 ноября 2019 года в Москве.


Вообще я бэкенд программист, но меня заинтересовала эта технология, она позволяет использовать мои знания бэкенда на фронте.


Проблема


Начнём с проблемы, которая решается этой (относительно новой) технологией. Проблема эта — быстро исполнять код в браузере. Быстро — это значит, «быстрее чем JavaScript», в идеале настолько быстро, насколько позволяет имеющийся у нас процессор.

Читать дальше →

1 год с Flutter в продакшне

Reading time13 min
Views20K

Это текстовая версия моей презентации на DartUp 2020 (на английском). В ней я делюсь проблемами, с которыми мы столкнулись, обсуждаю наш архитектурный подход, рассказываю о полезных библиотеках, ну и отвечаю на вопрос, удачной ли была эта идея – взять и всё переписать.

Читать далее

Магия асинхронных операций: взгляд изнутри. Future

Reading time15 min
Views15K

Бу́дущее — гипотетическая часть линии времени, множество событий, которые ещё не произошли, но могут произойти.

Этот месяц может определённо пройти под девизом "Даёшь асинхронность!", на хабах Dart и Flutter. Неудивительно, ведь асинхронный и реактивный подход являются основой работы языка и фреймворка.

Предлагаю продолжить тему асинхронности, и, через погружение во внутренний мир языка Dart, заглянуть за кулисы реализации, чтобы понять, кто же реально управляет нашим будущим. 

Читать далее

C и C++: межъязыковые интерфейсы

Reading time11 min
Views17K
Как известно, C и C++ — это родственные языки между которыми есть много общего. Но их пути, с годами, расходятся всё сильнее. В общих чертах дело обстоит так: код, написанный на одном из этих языков, не может быть скомпилирован под видом кода, написанного на другом. Этому мешает множество больших и маленьких различий между языками. Причём, речь идёт не только о синтаксических различиях. Некоторые общие синтаксические конструкции могут иметь разную семантику. Поэтому обычно нет никакого смысла в том, чтобы компилировать код, написанный на C, с помощью C++-компилятора. Не стоит доверять тем, кто утверждает обратное.

Правда, есть одна сфера, где обычно наблюдается согласие между C и C++. Это — ABI (Application Binary Interface, двоичный интерфейс приложений). Структуры данных и функции одного языка могут быть, в той или иной мере, использованы в другом языке. C и C++, кроме того, достаточно сильно пересекаются в области спецификаций интерфейсов, вследствие чего один и тот же заголовочный файл можно использовать из кода, написанного на обоих языках.



В этом материале я постараюсь собрать то общее, что есть у C и C++ и предложу некоторые рекомендации, которые позволят достаточно хорошо сочетать эти языки. Это, правда, будет всего лишь рассказ, иллюстрирующий точку зрения C-программиста, который хочет создавать интерфейсы для C++.
Читать дальше →

Как создать кастомный плагин для Dart-анализатора

Reading time6 min
Views2.2K

Привет! Меня зовут Дима, я frontend-разработчик в компании Wrike. В этой статье я расскажу про то, как написать плагин для анализа кода на Dart. Текст будет полезен тем, кому не хватает текущей функциональности дартового анализатора по статическому анализу или если вам просто захочется попробовать написать простой анализатор самостоятельно.

Читать далее

Работа с асинхронностью в Dart

Reading time10 min
Views13K

Всем привет! Меня зовут Дмитрий Репин, я Flutter-разработчик в Surf.

В этой статье я расскажу о том, как работать с асинхронностью в Dart: всё о самых важных классах библиотеки dart:async с примерами под катом. Поговорим о том, как в однопоточном языке сходить в сеть или базу данных и при этом не затормозить приложение.

Читать далее

Что за зверь — аффинные преобразования?

Reading time4 min
Views68K

Скорее всего, каждый из Вас хоть раз в жизни слышал термин «аффинные преобразования». Действительно, все постоянно о них говорят: «инвариантность к аффинным преобразованиям», «аугментация с помощью аффинных преобразований», «аффинные преобразования в компьютерной графике» и так далее. Однако, далеко не все могут сходу ответить на простой вопрос: «А расскажите, что такое аффинные преобразования простыми словами».

Вы сможете? В любом случае, давайте немного обсудим этот вопрос.

Читать далее

Мама, я хакер: пробуем вскрыть приложение на Flutter

Reading time11 min
Views18K

RFC 1983

Hacker - человек, наслаждающийся доскональным пониманием внутреннего устройства систем, компьютеров и компьютерных сетей, в частности.

Читать далее

Flutter. Как прокачать ваш BLoC

Reading time2 min
Views7K
Реализующих BLoC паттерн библиотек много. Но та, о которой я расскажу, необычная, и называется isolate_bloc.

Как можно понять из названия — это какой-то необычный блок, а особенность его в том, что он работает в отдельном Isolate (далее изолят) и не тормозит ваш UI.

В чем проблема обычного bloc-а?


Помимо бойлерплейта есть и еще одна проблема — он работает в главном потоке, поэтому тяжелые задачи, типо парсинга json могут привести к фризам в UI.

С первой проблемой могут помочь библиотеки по типу simple_bloc или cubit. Со второй — изолят, или обертка над ним — Compute. В принципе это действительно хорошая связка, которую используют многие, но даже она решает не все проблемы. Например, в изоляте нельзя работать с MethodChannel, и в принципе его использование сопряжено с неудобствами и бойлерплейтом.
Читать дальше →

DartUP 2020: итоги и видеозаписи докладов

Reading time1 min
Views2.1K


Вот и отгремел DartUP 2020! Два дня мы слушали доклады про Dart и Flutter, играли в Code Kombat и Bugz Arena и общались с участниками и спикерами в SpatialChat. Получилось ничуть не менее атмосферно, чем в офлайне. В этой статье мы подведем итоги конференции и поделимся с вами видеозаписями докладов на русском и английском.

Состояние Flutter на изолятах

Reading time17 min
Views9.7K

Во Flutter существует множество способов управления состоянием, но большинство из них строятся таким образом, что вся логика исполняется в главном изоляте вашего приложения. Исполнения сетевых запросов, работа с WebSocket, потенциально тяжелые синхронные операции (вроде локального поиска) все это, обычно, реализуют именно в главном изоляте. Эта статья покажет и другие двери.

Читать далее

Объявление о бета-тестировании null-safety Dart. Начало процесса миграции пакетов в надежное и безопасное состояние

Reading time8 min
Views2.7K


Безусловно, null-safety — важный шаг в развитии языка. Команда Dart анонсировала бета-релиз версии с null-safety! Мы перевели на русский новость об этом релизе, в котором вы узнаете, как мигрировать на новые версии, какие преимущества получите, и в чем польза null-safety для всех нас.

Information

Rating
4,851-st
Registered
Activity