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

Dart *
Язык программирования, созданный Google
Кодогенерация в Dart. Часть 1. Основы
Известно, что для программиста очень хорошо быть ленивым, потому что делать больше с меньшими затратами — ключ к прогрессу. Никто не любит делать одно и то же снова и снова. Это утомительно, скучно, да и совсем не креативно. Повторяя одно и то же действие мы часто делаем ошибки, но, к счастью, есть те, кто действительно хорош и эффективен в выполнении однотипных задач. И это КОМПЬЮТЕРЫ!
На сегодняшний день кодогенерация это возможность сделать работу за наименьший промежуток времени. Основная идея проста: найти закономерность в однотипных и утомительных участках кода, которые приходится писать снова и снова, создать инструмент для генерации, запустить его и увидеть, как происходит волшебство!
В мире Android разработки такие инструменты хорошо известны каждому разработчику. Это и Retrofit, и Dagger, и Room. А как насчет Dart? И не менее важный вопрос: что нам нужно, чтобы создавать собственные инструменты для кодогенерации?
Работа с камерой во Flutter
Возможность задействовать камеру существует во многих приложениях, и мы все регулярно пользуемся ею. Во Flutter мы можем реализовать работу с камерой с помощью двух официальных плагинов:
Между ними – заметная разница, и использовать их стоит по ситуации:
camera
позволяет взаимодействовать с доступными устройству камерами из вашего приложения и выводить изображение в виджет. Хорошо подходит под задачи, когда надо "кастомизировать" работу камеры под приложение.image-picker
запускает приложение камеры и возвращает объект типаFile
(изображение или видеофайл, выбранный пользователем) в ваше приложение. Такжеimage-picker
дает возможность выбора файла из имеющихся на устройстве, при этом, как и в случае камеры, запускается отдельное приложение, после чего в ваше приложение возвращается выбранный объект.
Здесь можно посмотреть исходники.
Dart 2. Асинхронное программирование: потоки данных
Асинхронное программирование: потоки данных
Содержание
- Получение событий потока
- События с ошибкой
- Работа с потоками
- Типы потоков
- Методы, обрабатывающие поток
- Методы, изменяющие поток
- Метод listen()
- Что еще почитать?
Что важно:
- Потоки обеспечивают асинхронную последовательность данных.
- Последовательности данных содержат пользовательские события и данные, считываемые из файлов.
- Поток можно обработать с помощью await for или
listen()
изStream
API. - Потоки предоставляют способ реагирования на ошибки.
- Существует два типа потоков: потоки-подписки (
single subscription
) и широковещательные (broadcast
).
Dart 2. Асинхронное программирование: futures
Асинхронное программирование: futures
Содержание
Что важно:
- Код в Dart работает в одном треде (прим. thread — поток) выполнения.
- Из-за кода, который долго занимает (блокирует) тред выполнения, программа может зависнуть.
- Объекты
Future
(futures
) представляют результаты асинхронных операций — обработки или ввода-вывода, которые будут завершены позже. - Чтобы приостановить выполнение до завершения в будущем, используйте
await
в асинхронной функции (илиthen()
при использованииFuture
API). - Чтобы поймать ошибки, используйте в асинхронной функции конструкцию
try-catch
(илиcatchError()
при использованииFuture
API). - Для одновременной обработки создайте изолят (или worker для веб-приложения).
Как нанимать людей в огромную компанию с непопулярным стеком. Разговор с Wrike

Увидеть новый и пока мало кому известный язык программирования в маленьком стартапе или пет-проекте у друзей — дело обыденное. Спросишь, зачем его взяли, скажут, что просто изучили из любопытства, понравилось и решили поэкспериментировать, потому что устали от вечных Java/.Net/JS на работе.
Но если компания говорит о себе фразами в духе «международный бизнес», «офисы по всему миру», «культ продуктивности», «нам важен результат, а не процесс», «нам нужны горящие глаза и стремление развиваться» — обычно от них не ждешь сюрпризов. Некоторые даже вводят стоп-листы на новые технологии, пока те не наберут вес в индустрии. На вопросы о минусах инструментов уклончиво говорят: «главное люди, а не языки».
У Wrike, где около 400 разработчиков, другой подход. Они не закрыли глаза на недостатки JavaScript и даже не выбрали компромисс, вроде Flow или TypeScript — а пошли совсем радикальным путем. Переписали фронт на язык, который тогда вряд ли знала и тысяча человек, и, кажется, до сих пор абсолютно в себе уверены.
Wrike занял почетное третье место среди medium-компаний в рейтинге лучших работодателей в ИТ «Моего круга» со средней оценкой 4.82. В топ самых высоко оцениваемых качеств компании входят: социальный пакет, комфортные условия труда, отношения с коллегами, адекватная зарплата и профессиональный рост.
Анонсирован Dart 2.2: более производительный машинный код, поддержка Set литералов
Сегодня (26 февраля 2019) мы объявляем о выпуске Dart 2.2 SDK — обновления для Dart 2, которое предлагает улучшенную производительность ahead-of-time (AOT) кода и поддержку Set литералов.

Flutter. Плюсы и минусы

В первую очередь расскажем немного о том, что же такое Flutter. Это фреймворк для создания мобильных приложений от компании Google. Он является кроссплатформенным и позволяет компилировать созданный проект под 3 операционные системы:
- Android
- iOS
- Fuchsia
Причем для последней ОС – Fuchsia – это пока единственный способ создать приложение.
Flutter на протяжении долгого времени, с 2015 года, был представлен только в альфа и бета версиях. Релиз первой стабильной версии состоялся 4 декабря 2018 года.
Flutter активно продвигается Google, постепенно набирает популярность и, скорее всего, в дальнейшем будет теснить другие, используемые сейчас средства кроссплатформенной разработки (React Native, Xamarin), особенно при условии широкого распространения Fuchsia. С учетом того, что Google позиционирует данную операционную систему как замену Android, рано или поздно Flutter вытеснит нативную разработку под Android. Поэтому перспективность и активное развитие – основные плюсы Flutter.
Три относительно честных способа создания Flutter проекта

Итак, с презентацией Google первой стабильной версии Flutter, которая случилась 4 декабря 2018 г. начался процесс изменения ландшафта на полях мобильного программирования. Появился новый игрок, способный изменить правила самой игры. Теперь из одной базы кода можно создавать сразу два нативных (т.е. «родных» для среды выполнения) приложения — для iOS и Android. В отличие от т.н. гибридных приложений, которые под капотом используют JavaScript, приложения созданные на Flutter работают быстро и плавно, поскольку код написанный на языке программирования Dart (для тех кто знаком с Java или C# с этим языком будет комфортно) затем компилируется (AoT, т.е. предварительно) в машинный код: отдельно для Android, и отдельно для iOS.
Поэтому, если вы изучите Dart и Flutter, вы сможете писать нативные приложения для двух самых популярных мобильных операционных систем, т.е. быть одновременно Android и iOS разработчиком. И это, вероятно, ещё не предел, поскольку было объявлено, что Google ведёт работу по расширению Flutter на предмет возможности создания с его помощью приложений для Windows, Mac и Web (проект Flutter для Web носит название Hummingbird — Колибри). В итоге может получиться так, что зная Dart и Flutter вы сможете писать
Управление состоянием приложения в Flutter

Детальный разбор того, что Google показал на конференции FlutterLive (и что это значит для Dart и мира)
Так как мы в Wrike сейчас одни из самых больших потребителей Dart (но, как показала конференция DartUP далеко не единственные), то мы постарались сделать для вас детальный разбор, что этот анонс значит для всего IT мира.
Спойлер для затравки: скоро всё будет Flutter

Просмотр Flutter Live в офисе Wrike 4 декабря

Давайте посмотрим Flutter Live 4 декабря в питерскоим офисе Wrike вместе!
Мы организовали открытую встречу и ждем вас в гости в Wrike, чтобы за пиццей и напитками посмотреть трансляцию Flutter Live. На ивенте, который пройдет в Лондонском музее науки, команда разработчиков презентует последние новости и апдейты Flutter SDK (открытая платформа для нативной разработки iOS и Android приложений с единой кодовой базой). Попкорн уже в микроволновках;)
Хотеть странного: обзор предстоящей конференции DartUP в Питере

Ближайшие события
Про Flutter, кратко: Основы
После доклада Юры Лучанинова, я решил для себя попробовать Flutter. Чтобы мозг размять, и чтобы было о чем похоливарить с мужиками на кухне. Дело пошло. Я начал смотреть, потом читать, потом писать. И вроде все получается, приложения запускаются, и то что объясняют — понятно, все просто. Но не без “но” — объясняют не все. А поскольку платформа, ЯП, подходы и даже предметная область для меня новые, то подобное вызывает раздражение, ведь у тебя “не запускается”, а ты даже не знаешь что гуглить: Dart/Flutter/Window/Screen/Route/Widget?
Перечитывать всю документацию Dart, Flutter и его виджетов конечно же не хотелось, ведь времени у меня не много, и мне лишь хотелось присмотреться к Flutter. Вот было бы здорово, если бы был небольшой гайд, в котором описано все нужное, но не больше, для понимая и написания не слишком сложных приложений на Flutter!
«Я просто энтузиаст проекта и пользователь языка Dart» — интервью с Ari Lerner, автором знаменитой ng-book

Как написать девять книг по совершенно разным технологиям, включая Angular, Vue, React, React Native и другим? Что самое важное в обучении, что такое «hallway chat» и вообще, при чём тут Dart и Flutter?
Сегодня у нас в гостях автор множества книг и статей по программированию, включая ng-book — Ari Lerner. Какой будет дальнейшая книга, что автор думает о таком… противоречивом языке, как Dart, и почему на конференциях так важно общаться, спрашивают ребята из программного комитета конференции HolyJS (Дмитрий DmitryMakhnev Махнёв и Евгений bunopus Кот).
DartUP: первая русскоязычная конференция по Dart и Flutter 1 декабря в Питере

Иногда кажется, что развитию IT-сообщества очень вредит скепсис и высокомерие. Мы решили организовать событие, где этому точно не будет места. Не будет разговоров о том, что одна технология лучше другой, а популярность языка – признак его универсальности и качества.
Мы тихо, уютно поговорим о Dart и Flutter, если будет интересно, попишем код, выпьем вкусного крафтового пива, сваренного специально для этого случая, послушаем фанк с винила на афтерпати и попробуем узнать что-то новое о разработке – вне зависимости от технического бэкграунда каждого из нас.
Конференция DartUP, в первый день зимы, в Питере, в арт-пространстве “Ткачи”. Вход бесплатный, регистрация обязательна.
Flutter для Android-разработчиков. Как создавать UI для Activity, используя Flutter
Эта статья написана для Android-разработчиков, которые хотят применить свои существующие знания для создания мобильных приложений с помощью Flutter. В этой статье мы рассмотрим эквивалент Activity во Flutter.
Релиз стабильной версии Dart 2.0 и Dart Web Platform
Возрождение Dart как популярного языка программирования для мобильной и веб-разработки
Сегодня мы объявляем о релизе стабильной версии языка программирования Dart — 2.0, а также веб-платформы Dart, которая предлагает уникальное сочетание продуктивности, производительности и масштабируемости.

Порхающие* велосипеды. Что делать с сохранением состояния во Flutter?

(*одно из значений слова flutter — порхать)
Разбираемся, есть ли жизнь сохранение состояния во Flutter-приложении. Что будет, если ОС решит его перезапустить. Куда денется пользовательский ввод и навигация, и как с этим справляться.
Дисклеймеры:
- для понимания нужно иметь стартовые знания о Flutter;
- рассуждаю с точки зрения Android, про iOS — это не ко мне;
- не являюсь специалистом по Flutter/Dart, подхожу с позиции новичка;
- в некоторых местах опускаю второстепенные моменты (например, реализации вспомогательных функций), найти недостающее можно в полном коде проекта.
Анонс Dart 2.0: Оптимизированный для клиентской разработки

Dash — официальный маскот языка
Вклад авторов
Wriketeam 245.6Surf_Studio 181.1dmitriizolotov 155.0Friflex_dev 104.8bunopus 100.4sharpfellow 92.8mrDevGo 83.7alphamikle 81.0MADTeacher 72.6