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