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

Ссылки

Примечания