Каждый год кто-нибудь пишет статью «Flutter vs React Native». Мы тоже не удержались — но с практической стороны. У нас есть реальный опыт с обоими фреймворками, и вот почему мы остановились на Flutter.
// Производительность
Flutter компилируется в нативный ARM-код. React Native работает через JavaScript-мост (хотя новая архитектура с JSI это улучшила). На практике разница заметна в анимациях и тяжёлых списках. Для наших продуктов, где есть графики, анимированные карточки и обработка изображений, это критично.
// Dart > JavaScript (для мобилки)
Неожиданный плюс Flutter — язык Dart. Строгая типизация из коробки, без настройки tsconfig. Null safety на уровне языка. async/await без сюрпризов. Нет зоопарка сборщиков. Да, экосистема меньше чем у npm, но для мобильной разработки пакетов хватает.
Мы не говорим, что React Native — плохой выбор. Если ваша команда живёт в React-экосистеме и делает типовое CRUD-приложение — React Native отлично подойдёт. Но для продуктов с кастомным UI и обработкой данных Flutter даёт больше контроля.
// Hot Reload — не маркетинг
Hot Reload во Flutter работает мгновенно и сохраняет состояние. Меняешь цвет кнопки — видишь результат за полсекунды, без перезагрузки. В React Native Fast Refresh тоже работает, но менее стабильно — иногда приходится перезагружать полностью. Мелочь, но за день разработки экономит десятки минут.
// Наш стек
Для мобильных приложений мы используем Flutter + Riverpod (стейт-менеджмент) + Dio (HTTP) + Hive (локальное хранилище). Бэкенд — тот же FastAPI, что и для ботов. Переиспользуем API, модели, бизнес-логику. Для Telegram Mini Apps по-прежнему React — там Flutter пока не вариант.