Flutter — универсальный фреймворк для мобильной разработки
Лёша Шведчиков. Разработчик в Яндекс Про
Команда Яндекс Про создаёт приложения для водителей такси, курьеров, сборщиков заказов в магазинах и других потенциальных исполнителей.
В Яндекс я попал через стажировку. Изначально был Android-разработчиком, закончил IT Школу Samsung, но однажды по воле случая выполнил пару фриланс-заказов на Flutter, и мне понравилось. В поисках работы я пришёл на сайт стажировок в Яндексе, там было два варианта: Android-разработчик и iOS-разработчик. Я подал резюме на Android-разработчика, рассказал про свой опыт и про проекты, которыми занимался, и в конце приписал: «Но на самом деле моё сердце лежит к Flutter». Мне повезло, оказалось, что в Яндексе есть такие продукты. В итоге я прошёл отбор, меня пригласили на стажировку — теперь я занимаюсь разработкой на Flutter в Яндекс Про. Также Flutter используют команды Драйва, Кью и Практикума.
Для меня важно работать в большом проекте, где можно решать действительно сложные и важные задачи. А ещё моя страсть — «поэтичный» код: такой, который вызывает восторг и который хочется перечитать.
Говорим Flutter — подразумеваем Dart
Многие люди уже пользуются приложениями, написанными на Flutter, но не замечают этого. Например, мини-приложение Gmail, приложения BMW, eBay, Tencent.
В Яндексе, в частности в Яндекс Про, фреймворк Flutter используется для написания мобильных приложений на Dart. Поэтому внутри мы их не разделяем — работа с Flutter предполагает знание Dart.
Фреймворк — это набор готовых абстракций, участков кода, функций и методов, которые можно подключить в Dart-проект всего одной строчкой. А ещё Flutter — это целая идеология и набор правил: как писать код и какие приёмы использовать. Это целый мир, существующий по своим законам и традициям.
Преимущества Flutter для разработчиков
— Кроссплатформенность. На Flutter легко переходить тем, кто уже пробовал создавать мобильные приложения на iOS или Android. При этом код получается качественным, потому что у команды появляется больше времени на доработку и тестирование: не нужно распылять внимание на несколько приложений, чтобы проверить, как в них реализованы одни и те же функции.
— Работать на Flutter может одна команда вместо двух или даже трёх. У нас в команде есть люди, которые пришли с хорошим знанием Flutter, есть бывшие Android- и iOS-разработчики. Все они ценны тем, что знают специфику разных приложений и при этом решают совместные задачи.
— Для того чтобы сделать хорошее коммерческое приложение, достаточно выучить всего один язык — Dart. Для сравнения: в нативной разработке нужно разобраться в специфике Android и выучить минимум два языка — Java и XML. К тому же придётся повозиться с Android-специфичными штуками. В случае с Flutter достаточно задать в консоли проект и писать его на Dart, чтобы создать приложение, которое работает «из коробки». Да, в дальнейшем для некоторых фич, связанных с платформенной спецификой, понадобится и нативность, но базово будет достаточно Dart.
— У Dart низкий порог вхождения, поэтому освоить Flutter можно довольно быстро. Особенно если вы уже знаете несколько языков программирования. Так было со мной: когда я начинал учить Flutter, я просто открыл документацию Dart, прочёл ее часа за три, и начал на нём писать. Какие-то сверхнавыки, вроде функционального программирования, здесь не нужны. Освоите базу — и это уже даст вам возможность начать программировать на Flutter. Легко переходить на Flutter и тем, кто пробовал писать приложения на React. JS и Dart похожи реактивным UI, подходами к управлению состоянием и вёрсткой в коде.
— Flutter позволяет больше времени уделять тому, что важно для пользователя: приятному UI, стабильной работе, так как реализация многих фич на Flutter занимает ощутимо меньше времени, чем их нативные аналоги.
— Этот фреймворк идеален для прототипирования, особенно в том случае, когда хочется просто проверить какую-то гипотезу: можно за пару дней сделать приложение и протестировать его. Flutter обеспечивает очень высокую скорость разработки, если вы умеете с ним обращаться и хорошо знакомы с API Flutter.
Кроссплатформенность является не только главным преимуществом Flutter, но и причиной, по которой он появился. Часто стоит задача разработать одинаковые приложения для iOS, Android и браузера. Большая компания может позволить себе несколько команд, а игрокам поменьше важно оптимизировать процесс работы. Так получился Flutter. Он похож на бензин, который подойдёт любому автомобилю: с ним заведётся и Android, и iPhone, и десктоп, и Fuchsia, и даже в вебе всё будет работать. Правда, понадобятся дополнительные усилия для того, чтобы приложение было нативным и удобным для пользователей.
Заменяет ли Flutter нативную разработку
Приложение, написанное на Flutter, везде выглядит и работает одинаково — и на Xiaomi, и на iPhone. Это удобно, но в то же время теряется платформенно-специфичный опыт и нативность.
В мобильной разработке нативным считается приложение, написанное под конкретную платформу и до мелочей учитывающее её специфику. Например, для iOS есть набор дизайн-гайдлайнов, описывающих, как должно выглядеть и работать хорошее приложение. В такие гайды входит анимация, способы прокручивания списков, индикаторы загрузки и другие стандарты.
Существенная разница между операционными системами состоит в концептуальных различиях: по-разному называются и работают одни и те же сущности, отличаются ограничения. С Flutter легко создавать универсальный базовый интерфейс, но для разработки более серьёзных функций — отправки уведомлений, получения геолокации и работы виджетов — нужно знать платформенную специфику.
Для пользователя нативность приложения проявляется в том, что оно выглядит узнаваемым, в нём интуитивно понятный интерфейс, к которому не нужно долго привыкать. Конечно, во Flutter можно написать код так, чтобы приложение выглядело максимально органично, но всё равно останется ощущение, что «что-то не то». Особенно это характерно для Flutter-приложений в iOS. Так что Flutter не является полной заменой нативной разработке.
Почему Яндекс запустил стек Flutter
Мы выбрали Flutter для разработки Яндекс Про, поскольку с ним можно унифицировать и ускорить разработку, при этом нет необходимости поддерживать работу двух команд. Яндекс Про — это большой продукт с множеством функций и исполнителей, и дальше он только продолжит расти. Поэтому для нас было важно написать приложение так, чтобы мы могли его легко дорабатывать и подключать всё больше сервисов. Flutter позволяет иметь в едином виде кодовую базу для всех сервисов, что гарантирует одинаково надёжную работу с любого устройства. Делать такой большой продукт параллельно для нескольких платформ очень тяжело.
Перспективы развития стека есть: вполне возможно, что новые сервисы будут разрабатываться на Flutter. Мобильными приложениями всё не ограничивается: начиная с версии 2.10 во Flutter добавили полную поддержку браузеров, десктопа и Windows. Нам кажется, что в будущем Flutter будет ещё более востребованным, поэтому у нас на него большие планы.