0
Обложка: Зачем учиться разработке на Flutter

Зачем учиться разработке на Flutter

Flutter — самый популярный фреймворк для кроссплатформенной разработки. По данным Statista, в 2021 году его выбрали 42% программистов, использующих кроссплатформенные инструменты. Благодаря Flutter бизнес экономит деньги, создавая «два продукта по цене одного», пользователь получает удобный и красивый интерфейс, а разработчик — удовольствие от процесса и скорости работы над проектом.

Илья Вирник
Илья Вирник
Руководитель направления Flutter в Школе мобильной разработки Академии Яндекса, руководитель группы в службе мобильной разработки Яндекс Такси

Специально для TProger Илья Вирник, руководитель направления Flutter в Школе мобильной разработки Академии Яндекса и руководитель группы в службе мобильной разработки Яндекс Такси (создает приложение Про — платформу для обработки заказов пользователей Яндекс Go и других информационных сервисов), объяснил, зачем нужен Flutter, почему на рынке дефицит Flutter-разработчиков и как освоить этот фреймворк.

Это живой и гибкий фреймворк

Flutter — это опенсорсный фреймворк с набором инструментов кроссплатформенной разработки, созданный Google в 2017 году. Он дал второе дыхание языку Dart, который создавался как замена JavaScript. Разработчики хотели взять все лучшее от JavaScript и других предшественников, устранив фундаментальные изъяны. Хотя Dart не занял место JS, он пригодился для работы с Flutter.

В Яндекс Такси мы используем Flutter уже три года. За это время он сильно изменился, совершив гигантский скачок в удобстве тулинга и стабильности работы на разных платформах. Если раньше это были только iOS и Android, то теперь появились Web, macOS, Windows и Linux. Технология развивается бешеными темпами как по части самого фреймворка, так и по части языка.

Например, около года назад в Dart появилась sound null safety — фича, необходимая для разработки null safe кода. Нашей команде, а также тысячам других разработчиков по всему миру это позволяет теперь писать безопасный с точки зрения выполнения в рантайме код: не нужно бояться, что из-за некорректных данных будут происходить неожиданные ошибки; статические проверки позволяют гарантировать доступность данных в тех местах, где это нужно. А свежие версии Flutter выходят почти каждые два месяца. Он постоянно обрастает новыми возможностями, поэтому разработчики «растут» вместе с фреймворком.

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

Но каждый раз, когда выходит свежая версия Flutter с обратно несовместимыми изменениями, «миграция» занимает время. Например, с первой версии на вторую мы в Яндекс Про переезжали все майские праздники. Впереди нас ждет такой же процесс с переездом на третью версию.

Он универсальный и  быстрый

Главное преимущество Flutter — его кроссплатформенность. Например, можно писать код, чтобы приложение работало в iOS и Android, а потом потратить 20 минут и собрать macOS-приложение. По сути, разработчик на Flutter превращается в своего рода фуллстека, пусть и без глубинных знаний в каждой из платформ. Используя этот фреймворк, можно быстро собрать веб-сайт, например, со своим резюме или описанием проекта, загрузить на Firebase за 5 минут — и все будет работать.

Еще один плюс — скорость разработки. Готовые решения Flutter позволяют писать меньше кода, это упрощает процесс создания приложений. Например, одна из ключевых фич фреймворка — функции hot reload и hot restart. Изменения в коде применяются на лету, не нужно пересобирать приложение — это экономит время. Так можно быстро тестировать функции, выявлять ошибки в коде и проверять гипотезы.

Когда мы опрашивали разработчиков в команде, что именно им нравится во Flutter больше всего, чаще других звучали именно эти фичи, поскольку они экономят действительно тонны времени на повседневной основе для каждого из членов команды.

Есть нюансы при интеграции Flutter-модуля в существующее нативное приложение. В документации фреймворка есть статья, как это сделать. Все описано довольно просто, но на практике иногда возникают проблемы при взаимодействии компонентов на стыке двух платформ.

Это красиво и понятно

Во Flutter есть много фич для создания красивого пользовательского интерфейса, который «ложится» одинаково хорошо и на iOS, и на Android благодаря собственному графическому движку Skia. У фреймворка есть API для работы с так называемыми неявными анимациями (implicit) — переходами между страницами, изменениями прозрачности элементов экрана, их размера и т. д. Что касается явных анимаций (explicit), то Flutter позволяет создавать интересные визуальные решения с применением разных эффектов, например, делать staggered-анимации и реализовывать собственные кастомные переходы между экранами, трансформации вью и многое другое.

Рядовой пользователь, скорее всего, даже не заметит разницы между кроссплатформенным продуктом на Flutter и нативным. Впрочем, по одной детали можно отличить нативное iOS-приложение от разработанного на Flutter. В нативе физика скроллящихся списков более плавная, а в приложениях на Flutter — более резкая. В случае с Android отличить нативное приложение от кроссплатформенного, кажется, в принципе невозможно.

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

Его легко освоить

Кроссплатформенная разработка начала активно развиваться относительно недавно — ей занимается примерно треть программистов, остальные все еще предпочитают нативные решения. Поэтому классных специалистов по работе с такими фреймворками мало. Даже мы в Яндексе испытываем сложности с поиском людей на Flutter: от стажеров до разработчиков высокого уровня. При этом все больше компаний открывают для себя кроссплатформенность, так что спрос на разработчиков будет только расти.

Чтобы вырастить комьюнити Flutter-разработчиков и ускорить рост рынка, мы бесплатно обучаем фреймворку в Школе мобильной разработки Академии Яндекса. Для прохождения отбора в этом году нужно было решить несколько алгоритмических задач с написанием кода на Dart и ответить на базовые вопросы о Flutter. Кстати, после обучения большАя часть выпускников приходит в Яндекс на стажировку. Часть ребят, которые проходят собеседования для стажировки в командах мобильной разработки, должны подтвердить начальные знания Flutter. Многие вчерашние стажеры остаются работать в штате.

Некоторые выступления экспертов по Flutter будут доступны всем желающим в Летнем лектории Академии Яндекса.

О чем еще нужно помнить

Flutter вряд ли подойдет для создания приложений, активно использующих сложные нативные фреймворки: фоторедакторов, сложных игр, а также для приложений, использующих карты, 3D-графику и т. д. Это не значит, что таких проектов на Flutter нет: довольно популярный фоторедактор Clay сделали с его помощью. Мы в Яндекс Про, в свою очередь, тоже очень активно работаем с нативной библиотекой Yandex MapKit: наше приложение ориентировано на работу с картой, поэтому значительная часть логики строится вокруг неё. Это усложняет работу, но не делает её невозможной.

Доля приложений, которым необходима работа с нативом в таком объёме, невысока. Для остальных задач Flutter подходит прекрасно. К примеру, на нем создают клиент-серверные проекты для интернет-магазинов, маркетплейсов и других сервисов. На этом фреймворке написаны приложения Alibaba, BMW, eBay Motors, KFC, The Hole, Яндекс Про. В подавляющем  большинстве обычных приложений, которые представляют из себя среднего размера клиент, плотно взаимодействующий с бэкендом и отрисовывающий какие-то данные с возможностью с ними взаимодействовать и/или изменять, Flutter идеально ляжет на продукт.

В целом у человека, хорошо знающего Flutter, не возникнет никаких проблем с поиском работы. Если при этом есть понимание основ нативной разработки под одну из платформ, например, знание жизненного цикла iOS- или Android-приложения, умение писать код на Swift или Kotlin, это будет дополнительным плюсом при трудоустройстве.

Полезные материалы для изучения Flutter