Захватит ли Flutter все платформы разработки?
Что такое Flutter и какие проблемы призван решить
Flutter — это кроссплатформенное решение, позволяющее создавать приложения для веба, Android, iOS, Linux, Mac, Windows и Google Fuchsia, используя единую кодовую базу и один язык программирования — Dart.

Flutter на множестве платформ в представлении художника
По сути, это решение — ответ на сравнительную сложность современной веб-разработки. В ней необходимо знать по крайней мере три языка: HTML, CSS, JavaScript. Для создания динамичных страниц добавляется изучение фреймворка React, Angular или Vue. Для сборки проекта нужен Webpack, для загрузки и установки модулей — менеджер пакетов NPM (или Yarn). Для того, чтобы добавить строгую типизацию в ваш JavaScript-код, нужно добавить TypeScript. На изучение всех этих технологий уходит время.
В мобильной же разработке проблема — это существование нескольких платформ на разных языках программирования. Чтобы создать нативное приложение для смартфона, приходится собирать несколько команд разработчиков для каждой операционной системы.
Преимущества Flutter
Flutter предлагает совсем другой подход к веб-разработке. Он использует HTML canvas для отрисовки страниц. Код на Dart компилируется в JavaScript с помощью библиотеки dart2js.
Flutter фактически контролирует каждый пиксель, отображаемый на экране, и не использует HTML, JavaScript или CSS для стилизации или логики. Это означает полную кроссбраузерность — во всех браузерах ваше приложение будет выглядеть одинаково.
Flutter использует собственную разметку на основе индивидуальных виджетов, колонок и рядов, с помощью которых гораздо проще придать странице тот вид, который был задуман дизайнером.
Использование единого языка для стилизации, динамики и бизнес-логики в веб-разработке уменьшает количество знаний необходимое для создания аппликаций. Dart это статически типизированный язык, null safety (безопасная работа с пустыми ссылками) уже доступна в новой версии языка, все это дает ему преимущества перед программированием на JavaScript.
Код на Dart компилируется в минифицированный и оптимизированный JavaScript. Не нужно использовать Webpack с его сложностями с конфигурациями.
Flutter подходит для разработки PWA, SPA и приложений, использующих сложную 2D- и 3D-графику.
В мобильной разработке работа на Flutter существенно снижает стоимость проекта, поскольку можно использовать единую кодовую базу для всех платформ. Команда тестировщиков, соответственно, тоже уменьшается.
Flutter имеет полноценную UI-систему для создания приложений, включающую типографику, иконки и режимы прокрутки. Научиться создавать на нем приложения просто, даже разработчикам с небольшим опытом.
Минусы:
Поисковые системы пока что не интерпретируют сайты на Flutter, они понятны только людям. Это негативно сказывается на SEO. Наверное, это главная причина, по которой Flutter используют в основном в мобильной разработке, так как там индексация поисковыми роботами не имеет значения — люди скачивают приложения из магазина, а не находят через поисковики, как сайты.
Кроме того, рисование на canvas снижает производительность сайтов, особенно если используется множество анимаций. В направлении оптимизации еще есть куда улучшаться. В последнем обновлении разработчики сказали что значительно улучшили производительность анимаций и в доказательство этому привели такой вот сайт созданный на Flutter.
А разработчик Георг ван дер Ховен, например, рассказал, что столкнулся с проблемой, которую он назвал “ад зависимостей”, перенося свое приложение на Flutter. Множество базовых функций для Flutter реализовано через сторонние библиотеки, и каждая такая зависимость добавляет технический долг. Речь идет о таких функциях, как геолокация, телефонный вызов или предотвращение спящего режима, пока приложение открыто, переход по URL-адресам, открытие карты и многих других.
В то время как iOS и Android предоставляют большую часть подобных функций в своих собственных SDK “из коробки”, кроссплатформенные решения должны предоставлять мост, пакет или подключаемый модуль для каждого из них. А в случае Flutter они должны быть реализованы на трех языках каждый: Dart, Swift/Objective-C и Java/Kotlin.
Как точно выразился сам ван дер Ховен, “если вы одалживаете чей-то код или функциональность, однажды вам, возможно, придется за это заплатить”. Каждое кроссплатформенное решение будет добавлять несколько уровней сложности к вашему приложению и вводить дополнительные точки отказа на каждом уровне. Любой пакет Flutter может дать сбой в коде Dart, коде Swift/Objective-C или коде Java/Kotlin. Любое обновление Flutter, Dart, iOS или Android может сломать части этого пакета, а вместе с ним и ваше приложение на одной или всех платформах. И вы сможете исправить ошибки, только если вы хорошо знаете все эти технологии.
Можно отметить и огромное количество незакрытых багов в проекте на GitHub (на сегодня 8 705 открытых issues). Команда не успевает их закрывать. Это не добавляет надежности проекту.
***
Вывод
Flutter пока не в состоянии покорить все платформы разработки. Но он отличное решение, если нужно быстро и дешево проверить какую-то идею, создать рабочий прототип или кроссплатформенное мобильное приложение, с небольшим количеством зависимостей. Для веба это сработает только в том случае, если SEO вам не важна.
Использованные материалы:
- https://medium.com/better-programming/flutter-is-about-to-win-over-the-web-be0a205af03d
- https://medium.com/better-programming/flutter-failed-to-solve-the-biggest-challenge-for-our-cross-platform-app-c551afa0ef18
- https://medium.com/flutter-community/why-flutter-has-become-the-best-choice-to-develop-a-startup-mobile-app-in-2020-5785ea153b13
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: