Назад

Flutter как альтернатива для кроссплатформенной мобильной разработки

Фаворитом для кроссплатформы был и остается React Native. К счастью, разработка не отношения. Смотреть по сторонам можно и нужно. 

Ребята из Google завезли новую технологию, которую я изучил вдоль и поперек. Как самостоятельную SDK, так и в сравнении с React Native. Об этом и расскажу в статье.

Кому советую читать:

  1. Разработчикам, которые хотят прокачивать скилы в кроссплатформе.
  2. Продуктовым менеджерам, которые хотят разработать приложение для iOS и Android и ищут подходящую технологию.

А теперь давайте к делу.

Чем интересен Flutter

Недельный “заныр” помог мне раскопать несколько особенностей.

Вот, что я узнал:

  • Cравним по простоте с разработкой веба. Все пишется на языке Dart, который похож на смесь JavaScript и Java. Это обеспечивает низкий порог вхождения для разработчиков из веба и нативки.
  • Dart — простой для всех, кто знаком с ООП-ориентированными языками. Язык соответствует всем аспектам этой методологии и реализует её через синтаксис. При этом, в отличие от той же Java, в Dart можно иметь функции высшего уровня.
  • Dart — многопоточный язык (в отличие от JS). Это значит, что разработчики, более не сдерживаемые интерпретатором JS AFAIK, могут работать с потоками и фьючерами, открывая поле для настоящего реактивного программирования.
  • Стопроцентно работающий hot reload. Киллер-фича, которая помогает легко “пересобирать” проект и экспериментировать: добавлять и убирать новый функционал, править ошибки “на лету”.

Hot reload будет моментально обновлять оба устройства, будь то симулятор или реальный девайс

  • Подход для работы с состоянием взят из концепции React. Виджеты ( или компоненты для мира веба) перерисовываются по необходимости, когда что-то меняется в состоянии приложения. Можно спокойно подключить тот же redux (например, fish redux от Alibaba) и получить однонаправленный поток — это позволит управлять состоянием приложения, прямо как в React Native.
  • Интерфейс разбивается на отдельные модули, как и в React Native. Привычные JS-разработчику компоненты тут зовутся виджетами, и интерфейс легко считывается как иерархия этих виджетов, вложенных друг в друга.
  • Имеет систему готовых плагинов и библиотек в рамках pub. Достаточно зайти на сайт мендежера пакетов и перевести ползунок на Flutter.

2600 репозиториев —вполне достойно для молодой технологии 

  • Работает как с http(s) запросами, так и с вебсокетами. Поддерживает GraphQL и все популярные библиотеки.
  • Важнейшие библиотеки уже вышли. Постоянно добавляются новые. Нет ощущения брошенности платформы.

Flutter или React Native

Чтобы получить максимально четкую картинку, я столкнул лбами Flutter и то, что уже проверено на поле битв. Мои “проектные битвы” проходят с React Native, поэтому начну с него. А выделить могу вот что:

  • Простая технология. React Native — легкий способ войти в мобильную кроссплатформенную разработку для тех, кто привык работать на JavaScript.
  • Обширное коммьюнити. За четыре года RN накопил тонны библиотек и готовых решений. Любая проблема в большинстве случаев решается через поиск в Google.

React Native “цветет и пахнет”. Звезды, форки и быстро закрывающиеся issues тому подтверждение

  • Возможность обернуть нативный код в JS. Если разработчик умеет писать нативный код, перенос части вычислений на нативный уровень и последующий sharing кода между платформами поможет избежать проблем с производительностью.

А теперь смотрим, что этому может противопоставить Flutter:

  • Схож по скорости с нативными решениями. Никакого JS тут нет, Dart компилируется напрямую в бинарный код. Таким образом, скорость выполнения операций такая же, как в Objective-C, Swift, Java или Kotlin.
  • Нормальная виртуальная машина. Не нужно беспокоиться о линковании библиотек (одна из главнейших головных болей RN), проблемах несовместимости на нативном уровне, поскольку весь код будет выполняться из-под Dart VM.
  • Многопоточность. В отличие от JS, можно полноценно работать с потоками. Прелесть да и только!
  • “Под капотом” Skia, а не нативные компоненты. Для отрисовки каждого пикселя Flutter использует Google Skia. Нет необходимости проектировать интерфейс отдельно под iOS и Android, Skia всё отрисует идентично, с поправкой на особенности местного UI (если необходимо)
  • Анимации на уровне 120 фпс. В этом плане Flutter обогнал не только RN, но и нативные языки. А все из-за движка Skia, который вкупе с  местным фреймворком для анимаций, выдает быстрый результат.

А вот в чем Flutter заметно проседает:

  • Менее развитое комьюнити. “Зеленый” Dart явно уступает устоявшемуся JavaScript. (есть шанс, что когда-то это изменится).
  • Меньше библиотек. Из-за этого многие базовые вещи, например, компоненты и сервисы, приходится писать вручную. В то время, как в React Native это же самое может быть реализовано одной из либ.
  • Сложно внедрять в проекты. Для работы с легаси-кодом придётся переписывать всё под Dart, в то время, как React Native можно использовать, вынося часть унаследованного нативного кода внутри нового проекта.
  • Больше кода не “под капотом”. Собственный графический движок повышает производительность, но заставляет писать так много, как этого требует SDK.

Что в итоге?

Для кроссплатформы React Native — это верный боевой солдат. Он успел пройти огонь, воду и медные трубы. Показал себя в сражениях. С таким все четко и без сюрпризов. И это прекрасно.

React Native — верный солдат, а “на хайпе” Flutter 

Один предпочтет не проверять судьбу проект на прочность и выберет зарекомендовавшую себя технологию. Другому понравится идея разрабатывать на чем-то “хайповом”. Окончательный выбор за вами — других вариантов и быть не может 🙂

Чтобы вы могли быстрее сориентироваться, предлагаю ответить на несколько вопросов.

  1. Готова ли кодовая база к росту на этой платформе? Если проект на нативных языках и вам не хочется переписывать код на Dart, React Native вам в помощь.
  2. Сложно ли это в поддержке? Если вы работали с Dart, нативными языками и жаждете нового, можно легко поддерживать унаследованный код на Flutter.  Гуру в JavaScript и тем, кто только начинает программировать уверенно советую прокачиваться в React Native.
  3. Нужны быстрые анимаций с высокой степенью оптимизации? Несколько решений для внедрения достойных анимаций (например, Lottie от AirBnb) присутствуют и в React Native, но Flutter на несколько шагов впереди.
  4. Горят ли сроки? (всегда горят) Чем больше библиотек и готовых решений, тем быстрее и проще разрабатывать. Если главный приоритет — “по-быстрому выкатиться на рынок с MVP”, React Native — ваше спасение.

Каким будет будущее Flutter и React Native? Рынок рассудит 🙂