Flutter

Flutter — открытый каркас приложений (SDK) для пользовательских интерфейсов, разработанный компанией Google. Предназначен для создания кроссплатформенных приложений из единой кодовой базы для Web[1], Fuchsia, Android, iOS, Linux, macOS и Windows[2]. Впервые о проекте было объявлено в 2015 году[3][4], официальный выход Flutter состоялся в мае 2017 года. К 2025 году фреймворк стал одним из лидеров в области кроссплатформенной разработки, позиционируясь как зрелая и высокопроизводительная технология[5][6][7].

Общие сведения
Flutter
Тип Каркас приложений
Автор Google
Разработчики Google и сообщество
Написана на C, C++, Dart
Интерфейс Декларативный
Движки Impeller, Skia
Языки интерфейса Многоязычный (через интернационализацию)
Первый выпуск альфа-версия (v0.0.6), 12 мая 2017
Аппаратные платформы Android, iOS, Google Fuchsia, Web, Linux, macOS, Windows
Последняя версия 3.35 (13 августа 2025)
Кандидат в релизы 3.38.0-0.2.pre (29 октября 2025)
Бета-версия 3.38.0-0.2.pre (29 октября 2025)
Альфа-версия v0.0.6 (12 мая 2017)
Тестовая версия 3.38.0-0.2.pre (29 октября 2025)
Репозиторий github.com/flutter/flutt…
Состояние активное
Лицензия BSD с новыми условиями
Сайт flutter.dev

Описание

Flutter формирует приложения со встроенным собственным рендеринг-движком, который напрямую выводит пиксельные данные на экран[8]. Исторически для этого использовалась графическая библиотека Skia[9]. В отличие от многих других каркасов UI (например, нативных приложений Android и iOS), которые полагаются на встроенные рендеринг-библиотеки платформы, Flutter полностью управляет своим рендерингом, что упрощает поддержку множества платформ с идентичным кодом пользовательского интерфейса[9].

Для решения проблем с производительностью, присущих Skia (в частности, подтормаживаний анимации, или «jank»), был разработан новый, собственный движок рендеринга — Impeller[10]. Его ключевое преимущество заключается в предварительной компиляции шейдеров на этапе сборки приложения, а не во время его выполнения[11]. Impeller использует современные графические API: Metal на платформах Apple и Vulkan на Android[11].

По состоянию на ноябрь 2025 года статус внедрения Impeller различается в зависимости от платформы[11]:

  • iOS: Impeller является движком по умолчанию, а поддержка Skia полностью прекращена[11].
  • Android: Impeller используется по умолчанию на устройствах с поддержкой Vulkan (как правило, с API 29 и выше). На более старых устройствах Flutter автоматически переключается на предыдущий движок с использованием OpenGL[11].
  • Web: Для веб-платформы Impeller не используется. Вместо него применяются рендереры на основе Skia, скомпилированной в WebAssembly: `canvaskit` (по умолчанию) и `skwasm`[11][12].
  • Desktop (macOS, Windows, Linux): Поддержка Impeller находится в стадии разработки и не включена по умолчанию. Движок можно активировать для тестирования с помощью специальных флагов[11][13].

Архитектура

Базовым элементом программы на Flutter является «виджет», который может содержать другие виджеты[14].. Фреймворк использует декларативный подход к построению интерфейса, схожий с React[14]: разработчик описывает, как интерфейс должен выглядеть в определённом состоянии (UI = f(state)), а Flutter берёт на себя его отрисовку и обновление[15][16]. В отличие от других кроссплатформенных наборов инструментов, например React Native и Xamarin, рисующих виджеты средствами нативной платформы, Flutter отображает виджеты самостоятельно, на уровне пикселей. В Flutter существуют два типа виджетов: «stateless» (без состояния) и «stateful» (с состоянием). Stateless-виджеты обновляются только при изменении входных данных, тогда как stateful-виджеты могут вызывать setState() для обновления внутреннего состояния и отрисовки[14][17]. Несмотря на то, что виджеты — основной способ создания интерфейса во Flutter, их можно обойти и рисовать непосредственно на холсте, что иногда применяется для игровых движков[18].

Фреймворк Flutter включает два набора виджетов, соответствующих разным языкам дизайна: виджеты Material Design реализуют стиль Google Material, а виджеты Cupertino — гайдлайнам Apple iOS[19].[20] Flutter позволяет использовать любой из этих наборов на любой платформе.

Приложения на Flutter пишутся на языке Dart. Финальные сборки для мобильных и настольных платформ компилируются по принципу AOT в машинный код[21]. Для веб-платформы код компилируется в JavaScript или WebAssembly (Wasm)[22]. Сборка в Wasm обеспечивает более быструю загрузку и повышенную производительность по сравнению с JavaScript[23]. Пользователь может использовать библиотеку пакетов Dart Pub для публикации и применения дополнительных модулей и плагинов[24]. Библиотека Foundation, написанная на Dart, содержит основные классы и функции, необходимые для построения приложений на Flutter, включая программные интерфейсы взаимодействия с движком[20][25].

Ядро Flutter, написанное в основном на C++, реализует низкоуровневую отрисовку через собственный графический движок. Исторически для этого использовалась библиотека Skia, однако с 2023 года идёт переход на новый движок Impeller, разработанный для повышения производительности. По состоянию на 2025 год Impeller является движком по умолчанию и единственным доступным для iOS. На Android он также используется по умолчанию на устройствах с поддержкой Vulkan (обычно API 29 и выше), а на более старых системах происходит автоматический возврат к предыдущему движку. Для платформы Web Impeller не применяется; вместо него используются рендереры на основе Skia, скомпилированной в WebAssembly (`canvaskit` и `skwasm`). На настольных платформах (macOS, Windows, Linux) поддержка Impeller остаётся экспериментальной и не включена по умолчанию. Движок взаимодействует с платформенными SDK (Android, iOS и др.) для поддержки специальных функций: доступности, файлового и сетевого ввода-вывода, поддержки нативных плагинов и т. д[20]

Интернационализация и локализация

Flutter не имеет встроенного ограниченного списка языков интерфейса, а предоставляет гибкую систему для интернационализации (i18n) и локализации (l10n), которая позволяет адаптировать приложение для любого языка и региона[26]. Ответственность за выбор поддерживаемых языков и предоставление для них файлов с переводами лежит на разработчике[27].

Процесс локализации основан на пакете `flutter_localizations`, который поставляется вместе с SDK, и библиотеке `intl`. Эти инструменты обеспечивают поддержку не только переведённых строк, но и форматов дат, чисел и других региональных особенностей[27]. Все текстовые ресурсы для каждого языка хранятся в отдельных файлах формата `.arb` (Application Resource Bundle), например `app_en.arb` для английского языка или `app_ru.arb` для русского[28]. На основе этих файлов Flutter автоматически генерирует код на Dart для типобезопасного доступа к строкам в приложении[28].

В коде язык и регион представлены объектом `Locale`, который состоит из кода языка (например, «en», «ru») и при необходимости кода страны (например, «US», «GB»)[28]. Приложение может как автоматически определять язык на основе настроек устройства пользователя, так и предоставлять возможность переключать его вручную[26]. Такой подход теоретически позволяет поддерживать любое количество языков[26][29].

Разработка и сборка приложений

Среда разработки

Разработка приложений с использованием фреймворка Flutter официально поддерживается на операционных системах Windows, macOS, Linux и ChromeOS[30].

  • Windows: Начиная с версии Windows 7 SP1 (64-бит), позволяет создавать приложения для Android, Windows и веб-платформы. Для работы требуются PowerShell 5.0 или новее и Git[30].
  • macOS: Является единственной средой, которая позволяет создавать и тестировать приложения для всех целевых платформ Flutter: iOS, Android, macOS, Windows, Linux и веб[31]. Использование macOS и среды разработки Xcode является обязательным условием для сборки приложений под iOS[32].
  • Linux: Поддерживается на 64-битных дистрибутивах и даёт возможность разрабатывать приложения для Android, Linux и веб-платформ[31][33].
  • ChromeOS: Разработка также возможна благодаря встроенной поддержке Linux-приложений, которая позволяет установить Android Studio и Flutter SDK[34].

Независимо от операционной системы, используемой для разработки, основная кодовая база приложения остаётся единой для всех платформ[35].

Структура проекта и форматы файлов

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

Входные данные

  • Исходный код: Логика и пользовательский интерфейс приложения пишутся на языке Dart и хранятся в файлах с расширением `.dart`[36]. Основной каталог для кода — `lib`, а точкой входа в приложение является файл `lib/main.dart`[37].
  • Файлы конфигурации:
    • `pubspec.yaml` — ключевой конфигурационный файл проекта в формате YAML. Он определяет метаданные (название, версия), зависимости от внешних пакетов и плагинов, а также декларирует используемые ресурсы, такие как шрифты и изображения[38].
    • `analysis_options.yaml` — используется для настройки правил статического анализатора кода.
  • Ресурсы (ассеты): Статические файлы, упаковываемые вместе с приложением. К ним относятся изображения (JPEG, PNG, WebP и др.), шрифты (`.ttf`, `.otf`) и файлы с данными (например, JSON)[39]. Все ресурсы должны быть объявлены в `pubspec.yaml`[39].
  • Платформо-специфичные файлы: Для каждой целевой платформы (Android, iOS, Web и др.) в проекте существуют отдельные каталоги, содержащие нативные файлы конфигурации и кода:
    • `android`: включает файлы системы сборки Gradle (`build.gradle`), манифест `AndroidManifest.xml`, а также код на Java или Kotlin для реализации специфичного для Android функционала[40][41].
    • `ios`: содержит файл проекта Xcode (`project.pbxproj`), список свойств `Info.plist` и код на Swift или Objective-C[37][41].
    • `web`: включает основной файл `index.html` для веб-версии приложения[42].

Выходные файлы (результаты сборки) В зависимости от целевой платформы Flutter SDK создаёт следующие типы файлов:

  • Android:
    • `.apk` (Android Package) — стандартный установочный пакет. Может быть создан как единый файл для нескольких архитектур процессоров, так и в виде отдельных файлов для каждой архитектуры для оптимизации размера[43].
    • `.aab` (Android App Bundle) — формат для публикации в Google Play, который позволяет магазину приложений генерировать и доставлять пользователям оптимизированные APK[43].
  • iOS:
    • `.ipa` (iOS App Store Package) — архивный файл, используемый для распространения приложения через App Store или для тестирования. Создание `.ipa` требует цифровой подписи с использованием сертификата разработчика Apple[44][45].
  • Windows:
    • `.exe` — исполняемый файл приложения, который распространяется вместе с необходимыми библиотеками `.dll` и папкой `data` с ресурсами[46].
  • macOS:
    • `.app` — стандартный пакет приложения для macOS, представляющий собой каталог со всеми необходимыми файлами. Может быть дополнительно упакован в установщик `.pkg`[47].
  • Linux:
    • Пакет, содержащий исполняемый бинарный файл, каталог `lib` с разделяемыми библиотеками (`.so`) и каталог `data` с ресурсами[48].

Экосистема и применение

Flutter обладает развитой экосистемой и широким сообществом. По состоянию на 2025 год он является одним из самых популярных фреймворков с открытым исходным кодом, а число активных разработчиков к марту 2025 года превысило 2,8 миллиона. В России Flutter стал доминирующей технологией для создания новых бизнес-приложений, заняв более 65 % рынка. Развитие фреймворка продолжается как силами Google, так и благодаря вкладу сообщества.

Помимо мобильных приложений, Flutter активно используется для создания коммерческих SaaS-продуктов и внутренних инструментов для настольных платформ (Windows, macOS, Linux)[49]. В вебе фреймворк применяется для разработки прогрессивных веб-приложений (PWA), панелей администрирования и корпоративных инструментов[50].

Новыми направлениями развития стали интеграция с технологиями искусственного интеллекта и иммерсивными технологиями. Разработчики используют Google ML Kit, TensorFlow Lite и Google AI Dart SDK для доступа к генеративным моделям (например, Gemini), а также интегрируют приложения с фреймворками дополненной (AR) и виртуальной (VR) реальности, такими как ARCore и ARKit[51].

История

Первая версия Flutter, известная как «Sky», работала на базе ОС Android[52] Она была впервые представлена на саммите разработчиков Dart в 2015 году, с целью обеспечить стабильную отрисовку интерфейса на 120 кадрах в секунду.[52].. 4 декабря 2018 года опубликован Flutter 1.0 на конференции Flutter в Лондоне[53].

6 мая 2020 года представлены SDK Dart версии 2.8 и Flutter 1.17.0, добавляющие поддержку API Metal[54].

3 марта 2021 года компания Google выпустила Flutter 2 на онлайн-мероприятии Flutter Engage[55]. Добавлен новый Canvas-движок для web и поддержка настольных приложений Windows, macOS и Linux (в раннем доступе)[55] Платформа также поставлялась с Dart 2.0, поддерживающим null-safety (работу без null-значений)[56].. Null-safety был сперва опциональным, так как ломал обратную совместимость, но стал обязательным в Dart 3 (2023)[56][57].

12 мая 2022 года представлены Flutter 3 и Dart 2.17 c поддержкой всех настольных платформ в статусе стабильных[58].

27 октября 2024 года несколько разработчиков Flutter-сообщества анонсировали форк Flock, ориентированный на упрощение участия внешних контрибьюторов при синхронизации с основным кодом[59].[60]

13 августа 2025 года вышла стабильная версия Flutter 3.35[61]. Релиз был представлен как ежеквартальное обновление, направленное на повышение производительности разработчиков[62]. Ключевыми нововведениями стали стабильная версия функции «горячей перезагрузки» (Hot Reload) для веб-приложений, которая была включена по умолчанию, и экспериментальная функция предварительного просмотра виджетов[62]. Также было представлено руководство по созданию функций на базе искусственного интеллекта с использованием таких инструментов, как Gemini Code Assist[61]. В подготовке выпуска приняли участие 168 членов сообщества, сделавших 1108 коммитов[62].

Ссылки

Примечания

  1. Amadeo, Ron Google начинает продвижение кроссплатформенной разработки приложений с помощью Flutter SDK (англ.). Ars Technica (27 февраля 2018). Дата обращения: 11 июня 2021. Архивировано 8 октября 2021 года.
  2. Amadeo, Ron ОС для смартфонов Google Fuchsia отказывается от Linux, предлагает совершенно новый интерфейс (англ.). Ars Technica (8 мая 2017). Дата обращения: 18 марта 2018. Архивировано 26 сентября 2019 года.
  3. С помощью Flutter Google выводит Dart на мобильную кроссплатформенную разработку (англ.). InfoQ (декабрь 2015). Дата обращения: 17 марта 2022. Архивировано 28 апреля 2022 года.
  4. Google анонсирует Flutter 1.0, первый стабильный выпуск кроссплатформенного мобильного инструментария (англ.). Android Police (5 декабря 2018). Дата обращения: 17 марта 2022. Архивировано 25 мая 2022 года.
  5. Flutter in 2025: The Evolution, The Ecosystem, and What's Coming Next. Digital One Agency. Дата обращения: 2 ноября 2025.
  6. Mobile-first и Flutter: как создать приложение для бизнеса и не прогадать. FITTIN. Дата обращения: 2 ноября 2025.
  7. Flutter 2025 Roadmap Update. The Flutter Blog. Дата обращения: 2 ноября 2025.
  8. Архитектурный обзор Flutter (англ.). docs.flutter.dev. Дата обращения: 26 июля 2024. Архивировано 10 октября 2025 года.
  9. 1 2 Claburn, Thomas Приложения на Google Flutter могут расходовать процессорные ресурсы. Решения от Google. The Register (12 ноября 2021). — «Движок использует Skia, графическую библиотеку на C/C++, которая отрисовывает интерфейс без обращения к нативным средствам ОС.» Архивировано 12 ноября 2021 года.
  10. Rendering Engine: Introducing Impeller for Flutter's Performance. CodingMart. Дата обращения: 2 ноября 2025.
  11. 1 2 3 4 5 6 7 Impeller rendering engine. flutter.dev. Дата обращения: 2 ноября 2025.
  12. Flutter web renderers. flutter.dev. Дата обращения: 2 ноября 2025.
  13. Tracking Issue: Impeller on Desktop (Windows, Mac, Linux). GitHub. Дата обращения: 2 ноября 2025.
  14. 1 2 3 Windmill, Eric. Flutter in action / Eric Windmill, Ray Rischpater. — Shelter Island, NY : Manning Publications Co, 2020. — P. 12,16. — ISBN 9781617296147.
  15. Declarative UI. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  16. Introduction to declarative UI. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  17. Введение в виджеты (англ.). docs.flutter.dev. Дата обращения: 6 октября 2022. Архивировано 6 октября 2022 года.
  18. Flame — игровой движок на Flutter. flame-engine.org. Дата обращения: 6 октября 2022. Архивировано 27 сентября 2022 года.
  19. Anderson, Tim Google сообщила об 80% росте приложений на Flutter в Play Store с выходом 1.20. The Register (5 августа 2020). — «В целом, стиль оформления следует рекомендациям Material Design от Google, но при этом поддерживаются и виджеты Cupertino с нативным внешним видом под iOS.» Архивировано 18 августа 2025 года.
  20. 1 2 3 Technical Overview — Flutter (англ.). flutter.dev. Дата обращения: 13 декабря 2017. Архивировано 16 июня 2020 года.
  21. stephenwzl Схемы компиляции Flutter. ProAndroidDev (1 августа 2018). Дата обращения: 6 декабря 2018. Архивировано 9 июня 2020 года.
  22. Lardinois, Frederic Flutter демонстрирует новые графические возможности: WebAssembly и поддержку RISC-V. TechCrunch (25 января 2023). Архивировано 20 января 2025 года.
  23. When to use Flutter for Web in 2025: A Comprehensive Guide. Milan Meurrens. Дата обращения: 2 ноября 2025.
  24. Использование пакетов (англ.). docs.flutter.dev. Дата обращения: 6 октября 2022. Архивировано 6 октября 2022 года.
  25. foundation library — Dart API (англ.). docs.flutter.dev. Дата обращения: 13 декабря 2017. Архивировано 16 июня 2020 года.
  26. 1 2 3 Локализация при трепетании: полное руководство. Future Trans. Дата обращения: 2 ноября 2025.
  27. 1 2 Flutter Localization: A Step-by-Step Guide. machinetranslation.com. Дата обращения: 2 ноября 2025.
  28. 1 2 3 Локализуем Flutter-приложение. Habr. Дата обращения: 2 ноября 2025.
  29. Интернационализация и локализация во Flutter: охват глобальной аудитории. ZEBA Academy. Дата обращения: 2 ноября 2025.
  30. 1 2 С чего начать работу с Flutter? ZEBA Academy. Дата обращения: 2 ноября 2025.
  31. 1 2 Best OS for Writing Flutter. JustAcademy. Дата обращения: 2 ноября 2025.
  32. Требования к железу для разработки приложений на Dart и Flutter. forum.hpc.name. Дата обращения: 2 ноября 2025.
  33. Desktop support for Flutter. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  34. Flutter and ChromeOS, better together. chromeos.dev. Дата обращения: 2 ноября 2025.
  35. Flutter Desktop Support: A Complete Guide. CloudDevs. Дата обращения: 2 ноября 2025.
  36. Flutter: структура проекта. Яндекс Образование. Дата обращения: 2 ноября 2025.
  37. 1 2 Структура файлов и папок в проекте Flutter. Codelab.pro. Дата обращения: 2 ноября 2025.
  38. The pubspec file. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  39. 1 2 Adding assets and images. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  40. Структура проекта на Flutter. the-unl.com. Дата обращения: 2 ноября 2025.
  41. 1 2 Flutter: пишем нативный код под iOS и Android. Habr (15 марта 2021). Дата обращения: 2 ноября 2025.
  42. Flutter Web. Что это и с чем его едят? Habr (1 сентября 2022). Дата обращения: 2 ноября 2025.
  43. 1 2 Build and release an Android app. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  44. Как опубликовать приложение в App Store в 2023 году. Habr (28 ноября 2023). Дата обращения: 2 ноября 2025.
  45. Режимы сборки Flutter. dartflutter.ru. Дата обращения: 2 ноября 2025.
  46. Build a Windows desktop app. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  47. Build and release a macOS app. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  48. Build a Linux desktop app. docs.flutter.dev. Дата обращения: 2 ноября 2025.
  49. Flutter Roadmap 2025: What You Should Learn to Stay Ahead. DEV Community. Дата обращения: 2 ноября 2025.
  50. Flutter for Web App Development: Is It Ready for Production? Enlab Software. Дата обращения: 2 ноября 2025.
  51. Flutter 2025: Trends, Updates, and What to Expect in Flutter 4. FlutterDaily. Дата обращения: 2 ноября 2025.
  52. 1 2 Amadeo, Ron Язык Dart от Google для Android: полное Java-free приложение с 120 FPS. Ars Technica (1 мая 2015). Дата обращения: 13 декабря 2017. Архивировано 6 мая 2015 года.
  53. Amadeo, Ron Google объединяет разработку для Android и iOS с помощью Flutter 1.0 (англ.). Ars Technica (4 декабря 2018). Архивировано 14 августа 2025 года.
  54. Siddiqui, Aamir Google выпускает Flutter 1.17 и Dart 2.8 (стабильные) для разработки приложений (англ.). XDA (6 мая 2020). — «Flutter теперь по умолчанию использует Metal для iOS, повышая быстродействие.» Архивировано 22 августа 2025 года.
  55. 1 2 Lardinois, Frederic Flutter 2 добавляет поддержку десктопа и web. TechCrunch (3 марта 2021). Архивировано 16 августа 2025 года.
  56. 1 2 Wander, Zachary Релиз Dart 2.12 с null-safety и C-интероперабельностью (англ.). XDA (3 марта 2021). Архивировано 18 августа 2025 года.
  57. Claburn, Thomas Язык Dart от Google отказывается от null. The Register (9 декабря 2022). Архивировано 25 сентября 2025 года.
  58. Claburn, Thomas Фреймворк Flutter теперь стабилен на всех платформах. The Register (11 мая 2022). Архивировано 5 октября 2025 года.
  59. Larabel, Michael Flutter форкнут как проект Flock. phoronix.com (29 октября 2024). Дата обращения: 30 октября 2024. Архивировано 18 августа 2025 года.
  60. Krill, Paul Фреймворк Flutter был форкнут. InfoWorld. Архивировано 17 августа 2025 года.
  61. 1 2 What's new. flutter.dev. Дата обращения: 2 ноября 2025.
  62. 1 2 3 Вышел Flutter 3.35: стабильный Hot Reload для веба, превью виджетов и фокус на AI. Habr. Дата обращения: 2 ноября 2025.