Миграция с React Native на Flutter
О миграции
Миграция с React Native на Flutter: производительность нативного уровня
React Native и Flutter решают одну задачу — кроссплатформенная разработка мобильных приложений. Но делают это принципиально по-разному. React Native использует JavaScript Bridge для общения с нативными компонентами. Flutter рисует весь UI самостоятельно через движок Skia/Impeller, минуя нативный слой. Результат — более предсказуемая производительность и пиксельно идентичный UI на iOS и Android.
Почему команды переходят на Flutter
- Производительность без Bridge. JavaScript Bridge в React Native — узкое место при сложных анимациях и тяжёлом UI. Flutter компилируется в нативный ARM-код напрямую, без промежуточного слоя.
- Консистентный UI на обеих платформах. React Native рендерит нативные компоненты — на iOS и Android они выглядят немного по-разному. Flutter рисует каждый пиксель сам, UI идентичен на всех устройствах.
- Dart как строгий типизированный язык. Dart компилируется ahead-of-time, имеет строгую типизацию и отличный null safety. Это снижает количество рантайм-ошибок по сравнению с JavaScript.
- Богатая стандартная библиотека виджетов. Material и Cupertino виджеты Flutter покрывают большинство UI-паттернов без сторонних библиотек. Кастомная анимация — через встроенный Animation API.
Что вы теряете и что приобретаете
Вы теряете возможность переиспользовать JavaScript/TypeScript код между вебом и мобильным приложением. Команда, знающая React, не знает Dart — потребуется обучение или найм Flutter-разработчиков. Экосистема React Native старше и некоторые нативные библиотеки есть только для него.
Вы приобретаете стабильную 60/120fps производительность без джанков, единый пиксельный UI без кросс-платформенных расхождений, Hot Reload для мгновенного применения изменений, Flutter Web для публикации того же кода в браузере и активно развивающуюся экосистему с поддержкой Google.
Этапы миграции
- Аудит React Native приложения. Инвентаризируем экраны, компоненты, нативные модули, сторонние библиотеки. Определяем что требует нативной интеграции.
- Оценка нативных зависимостей. Проверяем наличие Flutter-аналогов для всех используемых React Native библиотек. Критичные нативные модули без аналогов — пишем через Platform Channels.
- Обучение команды Dart и Flutter. Dart освоить за 1–2 недели для JavaScript-разработчика. Основные концепции Flutter (Widget tree, State management) — ещё 2–3 недели практики.
- Настройка архитектуры. Выбор state management: Bloc/Cubit для сложной логики, Riverpod для среднего масштаба, Provider для простых приложений. Настройка навигации через GoRouter.
- Последовательный перенос экранов. Начинаем с простых экранов без бизнес-логики. Затем экраны с формами и запросами. В конце — экраны с нативной интеграцией.
- Тестирование. Widget-тесты для компонентов, Integration-тесты для пользовательских сценариев, Unit-тесты для бизнес-логики в Bloc/Cubit.
- Деплой в App Store и Google Play. Настройка CI/CD через GitHub Actions или Codemagic. Flutter build может быть медленным — кешируем зависимости.
Сроки и стоимость
Простое приложение на 10–15 экранов без сложной нативной интеграции мигрирует за 8–12 недель. Приложение с картами, Bluetooth, камерой и сложной анимацией — 16–24 недели. Включите время на обучение команды Dart: это инвестиция, которая окупится на следующем проекте.
Приложение доставки еды переехало с React Native на Flutter за 14 недель. Анимации в меню стали плавными на всех устройствах — с React Native были джанки на бюджетных Android. Размер приложения уменьшился на 25%, время запуска сократилось с 2,8 до 1,4 секунды.
Откуда и куда
React Native — кросс-платформенные мобильные приложения React Native — это фреймворк для разработки нативных мобильных приложений на JavaScript и React, созданный Facebook (ныне Meta) и выпущенный с открытым исходным кодом в 2015 году. Его ключевая идея — «learn once, write anywhere»: один JavaScript-код выполняется на iOS и Android, при этом рендеринг происходит через нативные UI-компоненты, а не через WebView. Это принципиально отличает React Native от гибридных решений и обеспечивает производительность, близкую к нативной. Для каких проектов подходит React Native Приложения, требующие одновременного присутствия на iOS и Android Стартапы и MVP, где важно быстро проверить идею на обеих платформах Контентные приложения: новости, маркетплейсы, доставка, сервисы Компании с React-командой, расширяющиеся на мобильную разработку Корпоративные мобильные инструменты без сложных нативных функций Ключевые преимущества для бизнеса Экономия бюджета — одна команда разработчиков создаёт приложения для iOS и Android одновременно; экономия составляет 30–50% по сравнению с двумя нативными командами. Единая кодовая база — 70–85% кода общие для обеих платформ; отдельные нативные модули пишутся только там, где это действительно необходимо. Скорость разработки — Hot Reload позволяет видеть изменения мгновенно, что значительно ускоряет итерации по UI. Большая экосистема — npm-экосистема и тысячи готовых библиотек для навигации, анимации, платежей (Stripe), карт и других задач. Нативные компоненты — в отличие от WebView-решений, React Native использует нативные UI-элементы, что обеспечивает правильный look&feel на каждой платформе. Over-the-Air обновления — с Expo EAS Updates можно обновлять JavaScript-часть приложения без прохождения ревью App Store, ускоряя выкатку фиксов. Стоимость разработки на React Native React Native позволяет сократить бюджет по сравнению с двумя нативными командами. MVP для обеих платформ обходится в 500 000–1 500 000 ₽. Полноценное приложение с авторизацией, оплатой и push-уведомлениями — 1 000 000–3 000 000 ₽. Стоимость часа React Native-разработчика — 3 000–5 500 ₽. Разработка двух нативных приложений стоила бы в 1.5–2 раза дороже. Когда React Native не стоит выбирать Для приложений с интенсивной графикой, играми или сложной AR/VR-функциональностью — нативные Swift/Kotlin или Unity обеспечат значительно лучшую производительность. Если приложение сильно зависит от специфичных нативных API одной платформы — нативная разработка даст более полный доступ к возможностям системы без обходных решений.
О React NativeFlutter — кросс-платформенный фреймворк для мобильных и веб-приложений Flutter — UI-фреймворк с открытым исходным кодом, разработанный Google. Он позволяет создавать нативные приложения для iOS, Android, Web, Windows, macOS и Linux из единой кодовой базы на языке Dart. Flutter не использует нативные компоненты платформы — он отрисовывает весь интерфейс самостоятельно через движок Skia/Impeller. Это обеспечивает идентичный внешний вид на всех платформах и производительность 60/120fps. Архитектура Flutter основана на виджетах — всё является виджетом: кнопка, отступ, цвет фона, анимация. Виджеты бывают stateless (без состояния) и stateful (с состоянием). Для управления состоянием применяются различные подходы: Provider, Riverpod, BLoC, GetX — каждый подходит для определённого типа приложений. Flutter SDK включает богатую библиотеку Material Design и Cupertino (iOS-стиль) виджетов из коробки. Ключевое преимущество Flutter — Hot Reload: изменения в коде применяются мгновенно без перезапуска приложения, что кратно ускоряет разработку UI. Dart — строго типизированный язык, компилируется в нативный ARM-код для мобильных платформ и в JavaScript для Web. Единая кодовая база существенно снижает стоимость разработки по сравнению с раздельной разработкой под iOS и Android. Студия Gulaev.Dev использует Flutter для кросс-платформенных мобильных приложений. Для каких проектов подходит Flutter Мобильные приложения для iOS и Android одновременно — один проект, два магазина приложений. Экономия 40–60% бюджета по сравнению с нативной разработкой. Корпоративные мобильные инструменты — приложения для сотрудников, мобильные CRM, системы учёта, выездные формы. Клиентские приложения для сервисов — заказ услуг, отслеживание статуса, личный кабинет, push-уведомления. Приложения с анимациями и нестандартным дизайном — Flutter обеспечивает плавные 60fps анимации и позволяет реализовать любой дизайн, не ограничиваясь нативными компонентами. MVP-версии приложений — быстрый вывод продукта на рынок на обе платформы для проверки гипотез. Приложения с офлайн-режимом — Flutter + SQLite (через sqflite) или Hive для локального хранения данных и синхронизации. Преимущества Flutter для бизнеса Один код для iOS и Android — значительная экономия бюджета и времени на разработку и поддержку. Нативная производительность — компиляция в ARM-код, отсутствие JavaScript-моста (в отличие от React Native), стабильные 60fps. Единый дизайн на обеих платформах — пиксель-идентичный интерфейс на iOS и Android, важно для сильных брендов. Богатая экосистема пакетов — pub.dev содержит тысячи пакетов: работа с картами, камерой, биометрией, платёжными системами. Активная поддержка Google — фреймворк активно развивается, выходят регулярные обновления, долгосрочная поддержка гарантирована. Быстрое прототипирование — Hot Reload + богатые готовые виджеты позволяют быстро создавать и демонстрировать прототипы. Расширение на Desktop и Web — одна кодовая база может быть расширена для десктопных приложений или PWA. Стоимость разработки на Flutter MVP-приложение (3–5 экранов, базовая функциональность) — от 200 000 до 400 000 руб. Клиентское приложение с личным кабинетом и API — от 350 000 до 700 000 руб. Корпоративное приложение с офлайн-режимом — от 400 000 до 900 000 руб. Маркетплейс или сервисное приложение — от 600 000 руб. Стоимость включает разработку под iOS и Android, тестирование на реальных устройствах, публикацию в App Store и Google Play. Примеры из практики студии Gulaev.Dev разработал на Flutter мобильное приложение для заказа услуг строительной компании: каталог услуг, онлайн-калькулятор стоимости, форма заявки, личный кабинет с историей заказов, push-уведомления о статусе. Бэкенд — Laravel API с аутентификацией через Sanctum. Приложение опубликовано в обоих магазинах.
О FlutterГотовы перейти с React Native на Flutter?
Составим детальный план, проведём безопасную миграцию данных и запустим проект на новой платформе.