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].


