Почему писать приложение на Flutter — плохая идея?

Мы переписали наше iOS- / Android-приложение для звонков на Flutter, чтобы познакомиться с технологией и выяснить, подходит ли она для разработки мультимедийных кроссплатформенных приложений. То есть таких приложений, которые не нужно отдельно разрабатывать под iOS, Android или десктоп — один и тот же код работает на нескольких ОС.

Спойлер: подходит, но есть неприятные нюансы.

О Flutter

Технологию создали в Google, преследуя 5 ключевых целей:

  • Одна команда разработки под любую ОС
  • Легкая кастомизация
  • Быстрый цикл разработки (сборка новой версии не более 1 секунды)
  • Быть быстрее, надежнее и безопаснее, чем React Native

Для реализации платформы выбрали язык Dart. Так появился Flutter Framework.

Его позиционируют как равноценную замену нативной разработке — разработке под определенную операционную систему. В Fora Soft мы провели эксперимент: разработать приложение для видеозвонков с использованием WebRTC.Приложение должно работать одинаково на мобильных платформах (Android, iOS) — по функционалу, интерфейсу и способу взаимодействия с пользователем.

Цель — выяснить, действительно ли Flutter настолько хорош.

Про приложение

Для чистоты эксперимента технические требования для приложения сделали максимально простыми:

  • пользователи могут созваниваться по видео 1 на 1;
  • видео должно быть в разрешении от 640х480р до 1920х1080р — в зависимости от качества соединения.

Это минимальные требования для “звонилок” в 2023 году.

Приложение состоит из 3 главных экранов:

  • логин с помощью AppleID или аккаунта Google;
  • создание комнаты для видеозвонка или присоединение к ней;
  • экран видеозвонка 1 на 1.

Вот, с чем мы столкнулись.

Основная проблема — библиотеки

В процессе разработки пришлось подключить огромное количество библиотек из официального репозитория для Dart и Flutter. Само использование стольких библиотек увеличивает расходы на поддержку и разработку.

С одной стороны, ту или иную библиотеку могут перестать поддерживать и обновлять => придется вносить правки в код за дополнительный бюджет.

С другой — не-использование библиотек может означать, что приложение будет построено на устаревших принципах. Это увеличит стоимость поддержки продукта после релиза.

Flutter требует использования библиотек для реализации ключевых функций приложения. Например:

  • WebRTC

Для нормального отображения RTCVideoView необходимо использовать стороннюю библиотеку RxDart.

  • IO.Socket

В библиотеке IO.Socket при разрыве соединения может произойти утечка памяти на устройствах iOS.

  • Google Sign In

Библиотека для Google sign in не работает с самым безопасным и единственно правильным алгоритмом авторизации или регистрации пользователя.

  • MethodChannel

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

Из плюсов — у Dart и Flutter отличная документация и хорошая поддержка как со стороны Google, так и со стороны коммьюнити. Но такой развитой экосистемой, как, например, у Swift, похвастаться он определенно не может.

Нужно больше людей

Сам Flutter без дополнительных библиотек не поддерживает всех функциональностей нативных платформ. Их возможно интегрировать:

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

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

В уже написанных библиотеках тоже есть несовершенства, которые сглаживаются нативным кодом. Например, для поддержки входа в приложение через аккаунт Google пришлось написать нативный модуль для Android на Kotlin. Опять же — больше времени и больше трат.

Поэтому для разработки приложения на Flutter невозможно обойтись одним Flutter-разработчиком. Для решения проблем всегда нужно привлекать iOS- и Android-разработчиков. В случае нативной разработки, вполне может хватить 1 iOS и 1 Android-разработчика = сократить команду с 3 до 2 человек, сохранить треть бюджета.

Известные проблемы и безопасность

Баги — это нормально. Они есть у всех языков и фреймворков. Однако многие из багов в Flutter — критичные. Это может грозить в лучшем случае увеличением стоимости разработки. В худшем — судебными разбирательствами по утечке данных из-за использования небезопасных алгоритмов. Например, Flutter не поддерживает безопасный алгоритм авторизации через Google. Если использовать альтернативный, небезопасный или менее безопасный алгоритм, пользователь сможет зарегистрироваться, используя фейковые данные. Это грозит утечкой данных = убытками компании.

Время на разработку

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

Сравнение количества часов на разработку Flutter, iOS и Android приложений
Сравнение количества часов на разработку Flutter, iOS и Android приложений

Обратите внимание на факторы, которые будут увеличивать стоимость разработки на Flutter:

Сложность проекта и его размер

Если ваше приложение предполагает обработку оплаты и интеграцию сторонних сервисов (например, платежных провайдеров типа Stripe), придется доплачивать. Также более сложные функциональности, которые требуют участия искусственного интеллекта (например, распознавание лиц), тоже потребуют дополнительных расходов.

Поддержка после запуска проекта

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

Разработка бэкэнда

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

Оперативная память

Flutter более прожорлив по оперативной памяти. Приложение будет мешать работать другим процессам устройства, быстрее сажать батарею и следовательно раздражать пользователей. Каждый экран (функциональная страница приложения) в среднем использует в 4 раза больше ресурсов, чем в нативном приложении. Если построить на нем более-менее сложное приложение с 20 экранами и возможностью звонков 1-много (например, для проведения вебинаров), использование ресурсов устройства будет катастрофическим.

Оптимизировать такое приложение можно будет только уходом с Flutter => тем самым разработка двух приложений перерастет в разработку трех приложений и потерю пользователей платформы.

Из плюсов: скорость работы приложения на Flutter визуально не отличается от нативного. Интерфейс работает плавно, видео не лагает.

Итак

Flutter может вам подойти, если

  • вы строите MVP
  • у вас относительно небольшой бюджет на разработку
  • механики приложения несложные

Flutter можно использовать, например, для разработки:

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

Flutter точно вам не подойдет, если

  • в основе вашего приложения — сложная архитектура, вычисления или мультимедиа (игры, стриминговые платформы, видеозвонки, видео- и фоторедакторы, приложения с использованием AR)
  • ваше приложение использует любые алгоритмы и модели машинного обучения (например, для распознавания речи, текста, предметов, лиц, образов, умного поиска изображений и т.д )
  • приложение активно использует различную периферию мобильного телефона (bluetooth, nfc, gps, гироскоп и т.д)
22
2 комментария

а как вы относитесь к RN?

Ответить

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

Ответить