Привет, Хабр! Мы в компании Friflex запустили подкаст «Гости из IT». Вместе с ведущим Антоном Комоловым и экспертами из разных областей IT мы разбираемся в технологиях, и как они меняют нашу жизнь и работу. 

Сегодня делимся размышлениями Юрия Петрова, автора YouTube-канала «Мобильный разработчик» и Flutter Team Lead в Friflex, и Ильи Вирника, руководителя сектора разработки продукта «Такси» в Яндекс Про. 

О том, чем Flutter хорош для крупного и малого бизнеса, почему это перспективное направление для построения карьеры в IT и в чем особенность языка Dart, на котором пишутся Flutter-приложения.

Что такое Flutter и чем он выделяется среди других фреймворков

Илья Вирник: Flutter — это фреймворк, разработанный компанией Google, который позволяет писать приложения под разные платформы. Его глобальная идея — это кроссплатформенность. Команда Google использует замечательное продажное слово — «мультиплатформенность». Она позволяет бизнесу экономить громадное количество ресурсов, не содержать несколько команд, которые параллельно делают одно и то же.  

В свою очередь разработчики получили сакральное знание, которое дает им возможность работать и в iOS, и в Android, и в Web, а когда нужно — еще и на десктоп переключиться. 

Юрий Петров: Да, ранее уже были попытки разработать мультиплатформенный фреймворк. Но они все упирались в несколько проблем. 

Первая — это производительность. Так сложилось, что производительность именно кроссплатформенных решений всегда считались на порядок ниже, чему нативного приложения. Вторая — отрисовка нативного интерфейса, а третья — запросы в аппаратную часть смартфона. Эти три основные проблемы должен был решить любой кроссплатформенный фреймворк. 

Таких фреймворков несколько: React Native, PhoneGap, Xamarin, Ionic...Но именно Flutter решает все эти проблемы. Например, производительность. Так как Flutter полностью сам рендерит весь интерфейс с помощью своего графического движка, она у него достаточно хорошая. Или если взять какие-то нативные элементы, то во Flutter вы ничем не ограничены. Вы можете нарисовать абсолютно любой элемент, который видит пользователь на экране. Например, такой, который будет очень сильно похож на нативный переключатель в IOS.

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

А есть ли у Flutter недостатки?

Илья Вирник: Недостатки есть у всего. Flutter ни в коем случае не серебряная пуля, он не избавлен от проблем. На мой взгляд, именно производительность для Flutter все еще остается основной бедой.

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

В нашем случае есть большой внутренний стрим по работе с перформансом. Мы проделали очень большую работу, чтобы этот перформанс вышел на тот же уровень, на котором он был в аналогичном нативном приложении. Оно у нас было до Flutter. 

Это подтверждает, что с Flutter возможно писать приложения, которые будут аналогичны нативным. Но в некоторых местах это может быть сложнее.  

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

В 99% случаев, скорее всего, вы проблем с производительностью не заметите. Однако не отметить я это не могу, потому что это моя личная боль. 

Второе — это все-таки работа с нативом. Flutter позволяет замечательным образом работать с нативными API. Есть платформенные каналы, можно вынуть из платформы любую информацию. Обратиться к камере, микрофону при помощи инструментов, которые Flutter предоставляет из коробки. 

Но для этого необходимо написать код несколько раз: продублировать его на всех платформах — как минимум, на IOS, Android. В итоге эта самая экономия в два раза превращается в лучшем случае в один и семь. А, может быть, и того меньше. Например, если у вас есть работа с какой-то очень большой библиотекой, такой как Яндекс Карты.

Юрий Петров: Я добавлю про еще один недостаток — это размер приложения. Flutter тащит за собой свою библиотеку и конечный бандл всегда будет больше, чем нативный. Если вы компилируете под Kotlin или под Swift, аналог под Flutter всегда будет чуть-чуть, но больше. 

Илья Вирник: Там разница будет всего на 5 мегабайт. Но это имеет значение, потому что важно не сколько памяти у вас на девайсе, а сколько весит приложение в момент, когда пользователь будет его скачивать. Есть ограничения у сторов: некоторые из них не позволяют скачивать через сотовую связь бандлы выше определенного размера.  

Никита Спирьянов: У меня тоже было очень много боли в работе с камерой и платформенными зависимостями. 

Часто такой вопрос возникает у заказчиков: сколько нужно разработчиков? Если писать приложение на Flutter, нам достаточно одного разработчика, который знает Dart и Flutter. Мы здесь экономим.

А когда нам надо написать приложение, в котором есть платформенные зависимости, надо подтянуть Swift и переписать что-то, либо Kotlin — и переписать его. Нам нужен один, два или три разработчика соответственно. Когда мы собираем команду, надо понимать, что если нужна экспертиза в других языках, то нужны будут дополнительные разработчики.  Бывают достаточно сложные задачи, с которыми один Flutter-разработчик не справится. Или у вас команда Flutter-разработчиков, у которых нет экспертизы в нативе. Поэтому большое преимущество Flutter-разработчика, который имеет опыт в нативе.  

Насколько перспективно для мобильного разработчика изучать Flutter  

Юрий Петров: Кажется, что во Flutter очень низкий порог входа. Потому что это очень просто: скачиваешь фреймворк, создаешь новый проект, запускаешь, и вот у тебя уже есть волшебная кнопочка. И ты такой: «Я все знаю, я все умею». 

Но когда начинаешь сталкиваться с какими-то реальными проблемами, реальными кейсами, или когда приложение становится очень большим, то здесь необходимо знание алгоритмов, структуры и так далее. Если есть большое желание, через 3-4 месяца  человек уже может писать свои первые проекты.

На самом деле, база, конечно же, нужна. Минимум что должно быть —это понимание,  как работает компьютер, память и так далее, хотя бы на базовом уровне. У меня на канале очень много людей, которые приходили, вообще не зная про программирование. Просто во время пандемии они сидели дома, смотрели мои видеоролики. А потом мне писали, скидывали свои проекты. И все у них получалось, было бы желание. 

Никита Спирьянов: Еще один плюс для начинающих — очень крутая документация. Там очень понятно написано, что такое Flutter, как начать, что нужно делать, и дальше будут разбираться кейсы.

Слушайте выпуск целиком на разных платформах:

Apple Подкасты

Яндекс Музыка

Google Подкасты

Castbox

PocketCasts

Overcast

Castro

Комментарии (12)


  1. undersunich
    11.12.2023 11:51

    На сейчас на flutter нет достойной оплаты труда. Есть засилье демпингующей молодежи и знатоков no-code генерации


    1. mono
      11.12.2023 11:51

      Тут есть и обратная сторона медали. Если ты flutter-разработчик с нейтивным бекграундом, то ты сразу очень дорого стоишь. Конечно, нейтивные разработчики и так дорого стоят, но тут появляется альтернативная ветка для развития.

      В итоге получается, что flutter не сильно облегчает жизнь сильному разработчику. Нужно знать и flutter и iOS и Android.


    1. Anfet
      11.12.2023 11:51

      Да, такое сплошь и рядом. Причем натиска стоит дороже, а, внезапно, удобнее и чаще выгоднее для клиента - кроссплатформа на флаттера.


    1. tremp
      11.12.2023 11:51

      И какова разница по мидлам и сеньорам по Мск вашему?


  1. MountainGoat
    11.12.2023 11:51

    К сожалению, поддержка iOS в Tauri уже два года как alpha preview... Когда сделают, у меня не останется технического ответа на вопрос "Зачем использовать Flutter"


    1. darkmon
      11.12.2023 11:51

      Когда на tauri появится хотя бы одна вакансия в hh (в отличие от десятков и сотен на flutter) - появится хоть какой-то смысл в вопросе "Зачем использовать tauri"


    1. nikis05
      11.12.2023 11:51

      Затем что tauri рендерит html в веб вьюхе, а Flutter - нативные компоненты?


      1. MountainGoat
        11.12.2023 11:51

        И зачем они? Вот смотрю я на любое коммерческое приложение на моём мобильнике - нативные компоненты они если и используют, то только в settings где-то. Сейчас каждая собака свой дизайн рисует с парой общих гайдлайнов. Значит, заказчики требуют.

        Скорее, нахватаешься проблем с подходом "одна кодовая база для всего" которое при этом везде будет выглядеть нативно - то есть по разному.


        1. nikis05
          11.12.2023 11:51

          Я не с точки зрения того как они выглядят, а с точки зрения того как они себя ведут. Flutter-то тоже унифицирует стили между платформами, но разница между приложением на вебвьюхе и нативным все-таки часто чувствуется через всякие мелочи (вроде того как обрабатывается дабл тап). Это фиксится тщательным вылизыванием, но зачем, если можно без этого?

          Вообще веб-триада html, css, js - на самом деле просто ужасна. Излишне сложна, лишена стройной логики, имеет кучу ньюансов и подводных камней, серьезные и многочисленные риски для безопасности и т.д. Мы просто забываем об этом из-за того что вынуждены ее использовать и привыкли. Попробуйте активно поверстать на Flutter недели три, вам больше к css в жизни притрагиваться не захочется. Так что не хочется эту гадость еще специально тащить везде.

          И да, у Flutter есть свои проблемы, и есть куча причин выбрать именно вебвьюшный подход. Но вот вам технический ответ на вопрос "зачем использовать Flutter".


  1. Sabirman
    11.12.2023 11:51

    Кроме вышеперечисленных (React Native, PhoneGap, Xamarin, Ionic. ) мне еще помнятся: Java-апплеты, ActiveX, Flash, Silverlite, GWT, Qt, Delphi (Firemonkey), Blazor.. Нужны очень серьезные аргументы, чтоб поверить в сказку о выгодности использования универсальной библиотеки. А Flutter-ом еще и Google-рулит, который с легкостью закрывает раскрученные продукты. Dart - тоже своеобразный язык. Очень бедная инфраструктура. Ну, никак сейчас Flutter в продакшен не встает (разумеется, ИМХО).


    1. mrDevGo
      11.12.2023 11:51

      Я вам открою страшную тайну. В проде, приложений написаных на Flutter очень и очень много).


    1. mono
      11.12.2023 11:51

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

      Если не сойдутся, то flutter – не серебряная пуля, как выше сказано.