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

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

Flutter - это первая кроссплатформенная технология в технологическом стеке Surf. До этого наша студия 7 лет разрабатывала исключительно нативные приложения. Всё дело в том, что главным критерием при выборе фреймворка для нас является в первую очередь то, что у него под капотом. Ведь от этого напрямую зависит достижимый уровень качества продуктов, которые создаются на его основе.

Flutter — технология, вот уже 2 года активно развиваемая инженерами компании Google. Они собрали воедино позитивный и негативный опыт всех существующих кроссплатформенных решений и вывели рецепт идеальной кроссплатформы. Flutter позволяет хорошо сэкономить без малейших потерь для качества приложения и предоставляемого им пользовательского опыта. Разработка одного Flutter-приложения, которое будет устанавливаться и на iOS, и на Android-устройства стоит на 30% дешевле, чем разработка двух нативных приложений с нуля. Выбирая Flutter, вы делаете выбор в пользу единой кодовой базы, которую проще тестировать и отлаживать. Вы не столкнётесь с досадными задержками релизов из-за рассинхронизации платформенных команд. Одна команда разработки, два приложения, в два раза меньше проблем, 30-процентная экономия средств. А что самое главное - ваши пользователи не заметят никакой разницы.

В отличие от PhoneGap, Cordova, Ionic и других веб-фреймворков, Flutter не рендерит пользовательский интерфейс на WebView. За визуализацию приложения отвечает собственный графический движок и несколько пакетов кастомизируемых виджетов. Благодаря этому, стало возможно реализовать практически любые фантазии дизайнера интерфейсов в обозримые сроки.


В отличие от React Native, языком разработки Flutter-приложений является Dart, а не JavaScript. Dart компилируется в нативный код той платформы, для которой готовится сборка. В этом и есть залог производительного взаимодействия с платформой. Когда дело касается динамических UI-элементов, анимаций, переходов между экранами - всё должно работать предельно эффективно. К сожалению, React Native не всегда может обеспечить частоту обновления интерфейса в 60 кадров в секунду (именно при такой частоте смены кадров человеческий мозг воспринимает картинку идеально плавной). Для Flutter это не является проблемой.
В отличие от Kotlin Native, который сам по себе весьма любопытен, но позволяет унифицировать между платформами лишь код бизнес-логики, Flutter позволяет единожды написать не только бизнес-логику, но и UI. Это особенно важно, учитывая, что у типичного фронт-энд приложения, которым любое мобильное приложение по сути и является, наиболее сложна в реализации именно часть, касающаяся пользовательского интерфейса.

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

Flutter-индустрия сейчас развивается так интенсивно, как никогда раньше, что сказывается и на ситуации на рынке труда. Низкий порог вхождения, обусловленный относительной простотой фреймворка и привычностью языка (Dart является объектно-ориентированным и по синтаксису напоминает смесь Java и JS), привлекает всё больше специалистов из смежных сфер (Android, iOS, web).

Все вышеизложенные аргументы подтверждены нашим собственным опытом. Мы успешно запустили внутреннее приложение для сотрудников продовольственного ритейлера, а также внутрикорпоративное мобильное решение для сотрудников KFC. В текущей работе ещё один масштабный e-commerce проект.

Наша команда - известные адоптеры технологии в России, пришли во Flutter в числе первых в индустрии. Разработчики Surf являются основателями первого русскоязычного подкаста о Flutter, а также авторами известного поста на habrahabr.

FAQ

В: Как выглядят сборка приложения изнутри? Что во что компилируется?

О: Для Android: движок на C++ - Android NDK, Dart-код приложения - в нативную ARM библиотеку. Всё это пакуется в *.APK. Для iOS: движок на C++ - LLVM, Dart-код приложения - в нативную ARM библиотеку. Всё это пакуется в *.IPA. В дебажной сборке на всех платформах на устройство тянется Dart VM для выполнения чистого Dart-кода без его компиляции в нативную библиотеку. Если в приложении есть платформозависимый код для Android (Java, Kotlin) или iOS (Objective-C, Swift), тогда в сборках под эти платформы будут и эти библиотечные модули.

В: Каков размер релизной сборки под обе платформы?

О: Один из наших небольших проектов весит под Android - 8,5 Мб, а под iOS - около 30 Мб (с более тяжёлой графикой и Swift-кодом).

В: Можно ли во Flutter работать с <название любой библиотеки под Android или iOS>?

О: Да, можно. Но эти библиотеки будут доступны только под ту платформу, под которую были написаны изначально.

В: Можно ли во Flutter работать с пермшинами/пушами/файловой системой?

О: Да, без каких-либо ограничений на обеих платформах.

В: Как во Flutter обстоят дела с шифрованием?

О: Для шифрования/дешифрования есть вменяемый порт Bouncy Castle на Dart https://github.com/PointyCastle/pointycastle

В: Почему все говорят, что во Flutter можно делать безумные анимации? В чём отличия от нативных SDK?

О: Во многом потому что это по факту это сингл-активити приложение и любые анимации при переходах между экранами возможны, в отличие от стандартных мульти-активити андроид-приложений. Свой вклад делает крайне удачная коробочная библиотека для анимирования виджетов, анимации поддаются любые характеристики виджетов, что делает UI очень гибким к любым трансформациям. Ну и наконец производительный графический движок позволяет отрисовывать любые анимации в 60 FPS.

В: Flutter поддерживает адаптацию по планшеты?

О: Планшетная адаптация выполняется без проблем, также сразу под все платформы.

В: Flutter позволяет писать приложения, работающие в оффлайне?

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

В: Существуют ли примеры успешных Flutter-приложений?

О: Одно из самых больших Flutter-приложений сейчас покоряет китайский рынок и имеет более 100 тысяч активных пользователей. Это клиент для Taobao: https://play.google.com/store/apps/details?id=com.taobao.idlefish&e=-EnableAppDetailsPageRedesign. Тут можно посмотреть шоукейс-видео про этот проект: https://youtu.be/jtYk3gWRSw0.

Ещё один пример: приложение Google Реклама: https://play.google.com/store/apps/details?id=com.google.android.apps.adwords.

Есть и другие кейсы, про них можно почитать тут: https://flutter.dev/showcase.

А на этом сайте собраны тысячи Flutter-приложений разной степени известности и совершенно разные по функциональности. Можно поставить приложение на обе платформы прямо со странички и посмотреть на них в действии: https://itsallwidgets.com/.