Flutter, натив чи React Native: 7 питань перед вибором
Павло Рубановський
Оновлено · 9 хв читання

Для більшості нових застосунків, яким потрібні iOS та Android від однієї команди, Flutter — розумний вибір за замовчуванням. Ми працюємо на Flutter, тож зважайте на цю упередженість. Обирайте нативні Swift і Kotlin, коли платформа *і є* продуктом: AR, власна обробка камери, віджети, застосунки для годинника. Обирайте React Native, коли ваша команда й код уже на React.
Нижче — сім питань, які вирішують, що з трьох підходить саме *вашому* застосунку, разом з аргументами проти нас. Суто нативних проєктів ми не беремо, тож якщо ваші відповіді ведуть до нативу, наймайте нативну команду.
Чим насправді відрізняються Flutter, React Native і натив?
Тим, хто малює екран, і тим, якою мовою ви пишете.
| Варіант | Як малюється інтерфейс | Мова й кодові бази |
|---|---|---|
| Натив | Власні інструменти платформи: SwiftUI чи UIKit на iOS, Jetpack Compose на Android | Swift і Kotlin — дві кодові бази |
| Flutter | Власні віджети Flutter, які Flutter сам будує, компонує й малює, а не перекладає у віджети ОС | Dart — одна кодова база |
| React Native | Справжні view платформи: під час виконання React Native створює відповідні view Android та iOS | JavaScript або TypeScript — одна кодова база |
Обидва кросплатформні варіанти дозволяють писати нативний код там, де він потрібен: Flutter — через platform channels або пакет Pigeon, React Native — через нативні модулі. Вони зменшують, скільки Swift і Kotlin вам потрібно, але рідко прибирають їх зовсім.
1. Хто будуватиме й підтримуватиме застосунок наступні три роки?
Обирайте стек, яким ваша довгострокова команда зможе володіти, а не той, що виграє бенчмарки. Якість фреймворку рідко перемагає те, що вже знають люди, які підтримують застосунок.
- Сильна команда на Swift і Kotlin, якій нормально вести дві кодові бази: натив — цілком законна відповідь. Перенавчання робочої нативної команди — це витрати, а не безкоштовне оновлення.
- React-команда: React Native переносить парадигму React на Android та iOS, тож вона буде продуктивна майже одразу; нові застосунки радять починати з фреймворку на кшталт Expo.
- Мобільної команди ще немає: Flutter дає одну команду, одну мову й одну кодову базу для обох платформ.
2. Від яких можливостей платформи залежить застосунок?
Що глибше застосунок заходить у можливості однієї платформи, то сильніші аргументи за натив. Саме тут ми не обрали б Flutter.
- Віджети на головному екрані, Live Activities, застосунки для годинника. На iOS їх будують з WidgetKit і SwiftUI; на Android віджети роблять на Jetpack Glance. Власний codelab Flutter каже прямо: інтерфейс віджета головного екрана не можна намалювати засобами Flutter. А серед підтримуваних платформ Flutter немає watchOS. Якщо ці поверхні і є продуктом, більшість роботи однаково нативна.
- AR і власна обробка камери. AR на iOS працює на ARKit. Flutter дістається до нього через плагіни або код каналів, який, за словами самої документації Flutter, точно такий самий, як у нативному застосунку. Коли більша частина застосунку — такий код, Flutter додає шар замість того, щоб його прибрати.
- Нативні view всередині екранів Flutter. Це працює, але має ціну: на Android hybrid composition може знижувати частоту кадрів.
Для того, що використовує більшість застосунків, — зйомка з камери, платежі, пуш-сповіщення, мапи, Bluetooth — Flutter цілком підходить, а зрідка написаний platform channel — рутинна робота.
3. Наскільки нестандартний інтерфейс і наскільки важлива плавність?
Що нестандартніший і анімованіший інтерфейс, то більше окуповується модель рендерингу Flutter. Для бізнес-застосунку з формами й списками різниця важить значно менше, ніж стверджує більшість порівнянь.
Flutter малює кожен піксель сам, тож екран із перетягуванням, власними переходами й ефектами часток поводиться однаково на обох платформах. Від Flutter 3.27 його рушій Impeller — рендерер за замовчуванням на iOS і на Android API 29+, і він компілює шейдери під час збірки, а не під час роботи застосунку. Релізні білди компілюються в машинний код.
React Native рендерить справжні компоненти платформи — це перевага, коли ви *хочете* стандартний вигляд кожної платформи. Його New Architecture, увімкнена за замовчуванням від версії 0.76, замінила старий асинхронний міст на JSI, а Hermes заздалегідь компілює JavaScript у байткод. Аргумент про «вузьке місце мосту» застарів.
Натив першим отримує найновіший інтерфейс платформи, без жодних прошарків. Якщо застосунок має відповідати найсвіжішій iOS з першого дня, це найсильніший козир нативу.
Хоч що ви оберете, плавність користувачі оцінюють у першу хвилину роботи із застосунком, а не за бенчмарками: тест онбордингу за 60 секунд покаже, де вони йдуть.
4. У вас уже є код — нативний, на React чи вебзастосунок?
Наявний код — зазвичай найсильніший окремий аргумент. Переходьте, лише коли поточне рішення обходиться вам надто дорого, а не тому, що інше здається кращим.
- Два нативні застосунки, що розійшлися — на iOS є функції, яких немає на Android, кожне виправлення робиться двічі: тут перехід на Flutter окуповується. Ми робимо це за принципом «спершу ядро»: Flutter-ядро виходить як MVP, поки нативні застосунки й далі випускають оновлення; решта функцій виходить у регулярних оновленнях, спершу найпопулярніші. Див. перенесення нативних застосунків на Flutter без заморозки фіч.
- Робочий застосунок на React Native і команда, яка його знає: лишайтеся, якщо переїзд не виправдовує конкретна проблема. Скільки коштує переїзд: перенесення наявного застосунку на Flutter — вартість і ризики.
- Вебзастосунок на React, з яким хочеться ділити код: React Native — природний вибір. Бізнес-логіку на TypeScript можна спільно використовувати, а React Native Web, проєкт спільноти, рендерить частину компонентів у браузері.
5. Що дозволяють строки й бюджет?
Одна кодова база означає, що кожну функцію проєктують, пишуть і тестують один раз, — саме тут кросплатформа заощаджує гроші. Але платформна робота не зникає зовсім.
Вам однаково треба налаштувати два лістинги в сторах, впоратися з двома моделями дозволів, тестувати на справжніх iPhone і Android-телефонах і писати нативний код там, де плагіна не вистачає. Зникає інше: кожен екран і кожне бізнес-правило більше не пишуться двічі, і не треба тримати дві версії в синхроні.
Два винятки. Якщо майже весь дохід дає одна платформа, один нативний застосунок може коштувати менше й дати більше. Якщо застосунок потрібен на одну кампанію, виграє те, що команда вже вміє.
6. Хто щороку підтримуватиме застосунок в актуальному стані для iOS та Android?
Будь-який варіант потребує щорічної підтримки; кросплатформа дозволяє робити більшу її частину один раз. Обидва стори щороку піднімають планку. Станом на жовтень 2026:
- Від 28 квітня 2026 року застосунки, які завантажують в App Store Connect, мають бути зібрані в Xcode 26 з iOS 26 SDK або новіших; Apple підвищує цю вимогу щовесни.
- Від 31 серпня 2026 року нові застосунки й оновлення в Google Play мають націлюватися на Android 16 (API level 36); відстрочки діють до 1 листопада 2026 року.
Нативні команди першими беруть нові API платформи. Flutter і React Native додають залежність: фреймворк і ваші плагіни мають підтримати новий SDK, перш ніж ви зможете ним скористатися. Натомість одне оновлення покриває обидві платформи. Найбільший ризик у підтримці однаковий для будь-якого стеку — покинуті сторонні пакети, тож перевірте, від чого залежите, ще до старту.
7. Наскільки легко буде найняти людей під цей стек?
React Native спирається на найбільший пул розробників; у Flutter він менший, але один розробник покриває обидві платформи.
Stack Overflow Developer Survey 2026 питав, якими мовами респонденти багато працювали за останній рік. Серед 14 099 тих, хто відповів: JavaScript — 62,0%, Kotlin — 10,8%, Swift — 5,9%, Dart — 4,9%. Це про тих, хто відповів на опитування, а не про ринок праці, і Dart — лише непрямий показник для Flutter. Але напрям зрозумілий: під React Native найлегше набрати людей серед веброзробників. А для Flutter-команди справжнє порівняння — з двома нативними командами, по одній на платформу.
Хоч що ви оберете, оцінюйте людей за тим, що вони випустили: як оцінити Flutter-розробника, не читаючи код.
Сім відповідей в одній таблиці
| Питання | Якщо ваша відповідь… | Схиляйтеся до |
|---|---|---|
| Хто підтримуватиме | Сильна команда на Swift і Kotlin | Натив |
| Хто підтримуватиме | Команда на React чи JavaScript | React Native |
| Хто підтримуватиме | Одна команда під найм, обидві платформи | Flutter |
| Можливості платформи | Віджети, годинник, AR чи камера в основі | Натив |
| Інтерфейс | Нестандартний, анімований, однаковий на обох платформах | Flutter |
| Інтерфейс | Стандартний вигляд платформи | React Native або натив |
| Інтерфейс | Найновіший інтерфейс iOS з першого дня | Натив |
| Наявний код | Два нативні застосунки, що розходяться | Flutter, спершу ядро |
| Наявний код | Робочий застосунок на React Native або вебзастосунок на React | React Native |
| Бюджет | Майже весь дохід дає одна платформа | Натив для цієї платформи |
| Щорічна підтримка | Одне оновлення для обох платформ | Flutter або React Native |
| Найм | Набір із веброзробників | React Native |
Якщо ваші відповіді розкидані, зазвичай вирішують перші два питання — ваша команда й можливості платформи.
Як ми робимо застосунки на Flutter
DriveCode розробляє застосунки для iOS та Android, Flutter-first. Так само зроблено й наші власні застосунки: Kvit, Cosmo Color Sort і Cosmo Solitaire доступні і в App Store, і в Google Play. Для нового застосунку ми переглядаємо специфікацію, а потім називаємо фіксовану ціну за кожен модуль; проєкти — від $10K. Код лежить у вашому репозиторії з першого дня, а регулярні тестові білди з TestFlight і Google Play ви встановлюєте на свій телефон. Як це працює: застосунок для iOS та Android на Flutter. Уже маєте нативні застосунки? Перенесення нативних застосунків на Flutter за принципом «спершу ядро».
Що часто питають
Flutter повільніший за натив? Для типових застосунків швидкість рідко буває вирішальною: релізні білди Flutter компілюються в машинний код і рендеряться через Impeller. Натив зберігає перевагу на екранах, побудованих довкола нативних view чи специфічної для платформи графіки.
React Native досі працює через міст? За замовчуванням — ні. Від React Native 0.76 New Architecture увімкнена за замовчуванням і використовує JSI замість старого асинхронного мосту.
Чи може застосунок на Flutter користуватися нативними можливостями? Так, через плагіни або власні platform channels, які напряму викликають код на Swift і Kotlin. Виняток — віджети головного екрана й застосунки для годинника: їхній інтерфейс пишуть нативно.
А як щодо Kotlin Multiplatform? Це четвертий варіант: спільний код на Kotlin, а Compose Multiplatform має статус Stable для iOS та Android. Він пасує командам, які вже пишуть на Kotlin під Android.
Можна почати з нативу й перейти на Flutter пізніше? Так. Flutter-ядро виходить як MVP, поки нативні застосунки й далі випускають оновлення; решта функцій виходить у регулярних оновленнях, спершу найпопулярніші.