Приложения на Flutter: в поиске идеальной кроссплатформы
Кроссплатформенный фреймворк позволяет переиспользовать большую часть кода между различными платформами, плюс бизнес-логика, верстка и интерфейс приложений остаются практически без изменений. Вокруг этого строится выгода любой кроссплатформы по сравнению с нативными аналогами. И поэтому спрос на технологию существовал всегда, но в последние два года экспоненциальный рост показывает именно Flutter — достойный претендент на массовое внедрение.
Кроссплатформенных фреймворков много. Самые популярные из них Apache Cordova, Ionic, Xamarin, React Native, но ни один из них по-настоящему не умеет в native experience. По React Native даже был долгий всплеск, и многие поверили в него вслед за крупными брендами (Skype, Airbnb, Bloomberg, UberEats — всё это React Native). Но потом энтузиазм угас. Вот уже и сам его создатель, Facebook, открещивается от своего детища: сначала были слухи о переходе приложения Messenger на натив, а затем и релиз новой версии мессенджера на iOS.
Дело в том, что производительность в этих технологиях далека от идеала, UX всегда будет значительно хуже натива, вдобавок низкая степень интеграции с платформой — все это никак не тянет на качественную замену нативу.
Идеальная кроссплатформа должна соответствовать двум требованиям: обеспечивать качественный пользовательский опыт (плавные анимации, нативные UI элементы — все это не должно тормозить) и быть экономичной с точки зрения разработки (одно приложение вместо двух и минимум проблем при адаптации на каждую платформу). С UX/UI плохо у всех, кроме Flutter. С экономикой все в порядке у большинства фреймворков, если рассматривать их в контексте несложных приложений, но при развитии и расширении функций возникают проблемы.
Нативные приложения никуда не уйдут, но популярность кроссплатформ растет, потому что они позволяют сократить расходы и время на создание приложений для двух площадок. В 2019 году в этой нише сменился лидер.
Мало кто бросается в омут и переписывает нативные приложения в один момент. Обычно это связано с изменениями, которые давно напрашивались: например, надо сделать редизайн морально устаревшего приложения. Бизнес начинает думать, как оптимизировать процесс, и приходит к кроссплатформенным фреймворкам. Но все уже боятся их, так как есть React Native, который неоднозначно зарекомендовал себя с точки зрения производительности и удобства при разработке. Но на Flutter пока все смотрят с воодушевлением, потому что у него нет таких болезней и его производительность не страдает, — Евгений Сатуров, Flutter Teamlead Surf.
Для поддержки нативных приложений требуется синхронизация двух команд, также вдвое умножаются расходы на тестирование, релиз, дальнейшую поддержку и апдейт. Шаблонные проекты с небольшим жизненным циклом или невысокой степенью сложности нет смысла писать на нативе.
Потребность в кроссплатформе у бизнеса назрела давно, но до появления Flutter недочеты в технологии оказывались критическими для серьезных проектов. Google удалось решить эти вопросы, поэтому все больше заказчиков интересуются им.
Проекты на Flutter не оторваны от опыта, который годами накапливался в комьюнити мобильных разработчиков. Так например, библиотеки, доступные в нативных приложениях SDK, и платформенные API могут быть использованы для Flutter-приложений. Это делает фреймворк более универсальным и простым в освоении.
Flutter vs Android
Android был создан в 2008 году. За долгий срок приложения стали функциональнее и сложнее, фреймворк значительно перестраивался под потребности разработки, накопилось много старого кода. Flutter, который появился через 10 лет, позволил инженерам заранее учесть возможные узкие места. Android-разработчикам надо поддерживать большое количество версий — обратная совместимость позволяет приложению, разработанному для конкретной версии платформы, запускаться и в более поздних версиях этой платформы. Для бизнеса больший охват устройств — это плюс, но если сравнивать Android и Flutter, то верстать приложения на последнем быстрее в том числе из-за его новизны.
Например, это хорошо видно при создании анимаций. Из-за технических особенностей в Android можно создать далеко не каждую анимацию перехода между экранами. На Flutter любые переходы и анимации делаются проще и быстрее. Кроме того, у Flutter нет проблем с обратной совместимостью – и все изменения, которые вносятся в код, “не ломают” что было сделано раньше. Это упрощает дальнейшее развитие мобильных продуктов.
Flutter vs React Native
Репутацию кроссплатформам немного испортил негативный опыт с React Native. Крупные корпорации, такие как Airbnb, отказались от приложений на React Native из-за низкой производительности и нестабильности.
Релиз Flutter был в декабре 2018 года. Технология пока молодая, но все больше завоевывает доверие разработчиков.
Разница очевидна. React Native работает с платформой через технологию Javascript bridge. Обращаясь к платформе на каждый кадр, он постоянно перегоняет данные. Это очень медленно, особенно для рендеринга интерфейса. У пользователя возникает ощущение, что приложение подтормаживает. Во Flutter код сразу переводится в нативный, благодаря чему кадры сменяют друг друга со скоростью 60 кадров/с. Человеческий глаз воспринимает такую анимацию плавной.
Говоря о стабильности, репозиторий фреймворка достаточно активный, команда Flutter регулярно просматривает новые проблемы и решает их. В большинстве случаев ошибку устраняют от нескольких дней до пары месяцев. Dev-канал Flutter обновляется почти каждый день. Если разработчик нашел баг во Flutter, он всегда может написать в issues в официальном репозитории на github — отвечают сразу. Опенсорсный React Native — это малая часть того кода, что есть в Фейсбуке, он не так активно поддерживается своими создателями.
Банки и финтех на Flutter – насколько такой проект безопасен?
В банковской сфере с осторожностью относятся к новым технологиям. На самом деле Flutter может быть даже безопаснее нативных приложений. Если для последних с помощью реверс-инжиниринга можно восстановить исходный код, и даже после обфускации кода сохраняется его структура и некоторые наименования классов, то для приложений на Flutter обратную разработку проводить бессмысленно – исходники компилируются в нативный код и не читаются человеком.
Кроме того, приложения на Flutter могут использовать технологии безопасности самой платформы: Touch ID, Face ID или сканер отпечатка пальца. Отличий от нативной разработки не будет, так как используются нативные API. В Surf знают, о чем говорят: в их разработке есть приложение крупного российского банка [NDA] на Flutter, оно успешно прошло проверку безопасности. Крупнейший цифровой банк Nubank (более 20 млн клиентов за пределами Азии) объединил свою команду разработчиков на единой платформе и уже делится успешным кейсом интеграции Flutter в мобильное приложение.
Особенность приложений для ритейла – как Flutter может им помочь?
В большинстве случаев ритейл-приложения – это понятный набор базовых функций: посмотреть каталог и текущие акции, сравнить товары, узнать, где ближайшие магазины, проверить баланс карточки лояльности. Особенно это очевидно в продуктовом ритейле. Достаточно большой объем при идентичном результате на обеих платформах, писать под каждую из них отдельный код будет расточительством. Но бизнес идет и на это, чтобы обеспечить пользователю полностью нативный look’n’feel. В ситуации когда Flutter успешно справляется с этой задачей логичнее делать выбор в пользу кроссплатформенной разработки.
Например, такой выбор сделала ГК «Протек» (аптечная сеть Ригла, Живика, Будь здоров).
Перед запуском мобильного приложения для аптеки мы долго изучали вопрос, сравнивали плюсы и минусы натива и флаттера, — рассказывает Анастасия Боева, директор по интернет-продажам аптечной сети Ригла. — Под специфику наших 3-х сайтов аптек, которые имеют под собой единую базу, делать 6 нативных приложений нецелесообразно. Поэтому мы приняли решение о разработке Риглы на Flutter и планируем по этой технологии вместе с Surf запустить мобильные приложения еще двух аптек.
Для примера мы попросили 3-х разработчиков независимо друг от друга оценить типичные для проекта e-commerce фичи в относительных единицах story points.
Как видно, разработка на одну платформу имеет примерно одинаковую трудоемкость. Flutter может быть на 10% быстрее за счет довольно простой работы с пользовательским интерфейсом, но далеко не везде: где-то быстрее, где-то есть проблемы. В идеале — быстрее процентов на 20, если проект совсем не сложный.
Flutter для корпоративных приложений
На внутренние приложения бюджет обычно в разы меньше, чем на клиентские. ROI внутренних приложений почти всегда ниже, поэтому вкладываться в них не целесообразно. Кроме того, внутренние приложения непритязательны к UI: сотрудник будет обязан пользоваться мобильным продуктом своего работодателя, альтернатив у него нет. Если использование приложения предполагается на служебных девайсах, то даже и радостно. Но если компания по-настоящему идёт в мобильный бизнес, выстраивает собственную информационную систему и поддерживает концепцию BYOD (Bring your own device), то все становится в разы сложнее. Нужно поддерживать обе платформы и целый парк моделей смартфонов. А бюджет на разработку больше не становится… Тут и приходит на помощь Flutter.
Есть стереотип, что на необкатанной технологии можно быстро сделать приложение для сотрудников. Даже если оно будет страшненькое, главное что производительное. На самом деле Flutter позволяет делать привлекательные интерфейсы как для корпоративных, так и для клиентских сервисов, — Евгений Сатуров, Flutter Teamlead Surf.
Например, у водителей Яндекс.Такси был «Таксометр» для Android. Он помогал сотрудникам оформлять заказы, навигироваться и смотреть заработок. Не хватало подобного iOS-приложения, его требовалось разработать в сжатые сроки. Бизнес, оценив технические перспективы проекта, принял решение воспользоваться возможностями кроссплатформенного фреймворка вместо нативной разработки. Flutter стал экспериментом для команды iOS-разработчиков Яндекса и оправдал ожидания.
В сети ресторанов KFC сотрудникам выданы служебные девайсы на Android, но высший менеджмент использует это же приложение на личных телефонах, а у них в основном айфоны. Flutter порадовал всех.
Когда KFC в феврале 2019 рассматривали предложение Surf по разработке мобильного приложения на Flutter, то поначалу мы сомневались, — рассказывает IT бизнес-партнер KFC Евгений Никитчук, заказчик аналитической BPM-системы DSR (Digital Successful Routine) для менеджеров и команды ресторанов сети. — В первом релизе приложения DSR при большом объеме задач бюджет был ограничен. Surf предложили Flutter, чтобы уместить в ту же стоимость больше функций (в частности, отдельный интерфейс для территориальных менеджеров). Технология новая и для нас на тот момент неизвестная, но потом соотнесли выгоду, риски и решили довериться экспертизе коллег из Surf. В итоге не пожалели: все работает быстро и конечные пользователи не могут отличить наше Flutter-приложение от нативного.
Кому Flutter не подходит?
Если задачи приложения тесно связаны с железом и нужна глубокая оптимизация производительности (например, у вас мобильная фондовая биржа), то лучше эту глубину оценить на старте. В некоторых случаях это нужно делать на стороне Android и iOS отдельно, и здесь Flutter не сможет показать экономию ресурсов.
Другое препятствие — если приложение заточено под дополненную реальность. AR требует глубокой интеграции с платформой, что делает бессмысленной саму идею кроссплатформенного приложения. Это справедливо для автобизнеса, мебельных магазинов или интерьерных салонов, где нужно посмотреть продукт в 3D-модели.
Поддержка и развитие проектов на Flutter: в чем подвох?
Может показаться, что в работе с фреймворком все идеально. Но есть существенная трудность – собрать команду разработчиков. С этими рисками неизбежно столкнется любой бизнес-проект по объективным причинам:
- Рынок труда под эту технологию только формируется. На работных сайтах по ключевому запросу “Flutter” на момент написания статьи размещено не более 200 резюме на все СНГ (1/3 – РФ), в то время как предложений Android-разработчиков только на НН.ru Россия 6-7 тысяч.
- Большинство соискателей – новички во Flutter. Это объясняется тем, что реальный опыт получить просто негде – проектов на фреймворке немного.
Собрать на Flutter-проект сильную команду из более чем 5 разработчиков – непростая задача, требующая времени. У одного из наших банковских клиентов на этапе развития возникла такая проблема при переходе на инхаус. В итоге команду собрали, но это стоило больших усилий. Так что некоторое время придется мириться с распределенной командой.
В такой ситуации у бизнеса есть два выхода: экстенсивный и интенсивный.
Поддержка и развитие проекта в большей степени зависят от скиллов команды, чем от особенностей фреймворка. Это не сложнее, чем при работе с другими кроссплатформенными технологиями. Но для старта полноценного проекта мало выучить Dart и написать несколько сэмплов, нужно понимать возможности и ограничения мобильной разработки в целом, особенности разных платформ — как Android, так и iOS.
Приложения на Flutter: как будет развиваться технология в изменившемся мире?
Кризисные условия помогут Flutter: все больше компаний будут рассматривать эту технологию как возможность для быстрого перехода в онлайн и расширения влияния на электронных площадках. MVP приложения на Flutter реально создать за 2-3 месяца, а полноценная разработка будет стоить в среднем на 30% дешевле, чем создание двух нативных приложений. Так фреймворк сэкономит два важных ресурса – время и деньги.
Проект проекту рознь: где-то Flutter может сэкономить 15% бюджета, а где-то до 50%. Еще одно важное преимущество технологии – ее использование позволяет сократить показатель time-to-market. Доставка новых фич в продакшн происходит быстрее, а значит, продукт получает существенную фору для развития и может приносить больше денег.
Удобнее стало и разработчикам. Flutter помогает адаптировать интерфейс под платформы. Таким образом, пользователю не нужно переучиваться или привыкать к внешнему виду сервиса, если он меняет Android на iOS и наоборот. В то же время с этим фреймворком у вас есть возможность сделать приложения на Flutter более кастомными.
К возможностям кроссплатформ уже пришли компании из ритейла, финтеха, e-commerce. Вероятно, в будущем количество проектов на Flutter будет только расти, поскольку он позволит написать код один раз и получить продукт для мобильных устройств, десктопов и веб-площадок.
Как итог, несколько практических замечаний о Flutter.
При создании приложений:
- Шаблонные и краткосрочные проекты лучше сразу писать на кроссплатформе, поскольку с этим справится одна команда – так выйдет быстрее и дешевле.
- Для бизнеса, который только начал переходить в онлайн, а также стартапов приложение на Flutter позволит уже на старте охватить более широкую аудиторию – пользователей Android и iOS.
- Технология помогает при минимальных затратах создавать стабильные корпоративные приложения с привлекательным интерфейсом сразу на обе платформы. Компания также сэкономит и позаботится об удобстве сотрудников, если внедрит BYOD (когда сотрудники имеют право устанавливать служебные приложения на личные смартфоны).
- Flutter – это безопасно, поскольку исходный код невозможно расшифровать даже при реверс-инжиниринге. Поэтому нет особенных препятствий для разработки банковских приложений.
На этапе поддержки и развития приложений:
- Если возникла проблема, разработчик не останется с ней один на один, проблемы решаются командой Flutter в репозитории.
- Flutter помогает сократить расходы на создание приложений, поэтому в кризис интерес к этой технологии будет расти, а как следствие и спрос на Flutter-разработчиков.
- Новые фичи поступают в продакшн быстрее, что повышает рентабельность проекта и сокращает time-to-market.