Введение
Добро пожаловать в наш ежеквартальный релиз Flutter 3.38. Это обновление призвано повысить вашу продуктивность и улучшить взаимодействие с разработчиками благодаря сокращённым точкам и обновлениям для предварительных просмотров виджетов. Благодаря нашему сообществу этот релиз включает в себя в общей сложности 825 коммитов от 145 уникальных участников, 37 из которых — новички. Давайте разберёмся, что же нового в этом релизе.
Сокращения точек
Пишите более лаконичный код на Dart! Мы рады представить новую функцию Dart — сокращённые записи с точкой ! Сокращённые записи сокращают объём шаблонного кода, позволяя опускать типы, которые Dart может вывести.
.startНапример, вместо . можно использовать сокращения MainAxisAlignment.start.
// С сокращениями
Column (
mainAxisAlignment : .start,
crossAxisAlignment : .center,
children : [ /* ... */ ],
),
// Без сокращений Column (
mainAxisAlignment : MainAxisAlignment.start,
crossAxisAlignment : CrossAxisAlignment.center,
children : [ /* … */ ],
),
Это также работает для именованных конструкторов! EdgeInsets.all Вместо этого можно написать .all:
Padding(
padding: .all(8.0),
child: Text('Hello world'),
),
Эта функция включена по умолчанию в Dart 3.10 и Flutter 3.38. Подробнее см. на странице, посвящ��нной сокращениям dot, на сайте dart.dev или на Хабре на русском. Об этом и многом другом (например, о хуках Dart!) можно прочитать в записи блога, посвящённой выпуску Dart 3.10 или на Хабре на русском.
Веб
Файлы конфигурации веб-разработки
Команда flutter runтеперь поддерживает файл конфигурации для веб-настроек. Это позволяет указать информацию о хосте, порте, сертификате и заголовке в web_dev_config.yamlфайле в корне проекта. Зарегистрируйте файл, чтобы все участники вашей команды могли отлаживать код с одинаковыми настройками. Подробнее см. в статье « Настройка файла конфигурации веб-разработки» .
Настройки прокси-сервера для веб-разработки
Помимо существующих флагов командной строки, файл конфигурации веб-разработки также поддерживает новые настройки прокси-сервера. Настройки прокси-сервера позволяют перенаправлять запросы по настроенным путям на другой сервер. Это упрощает разработку веб-клиента, подключающегося к динамическим конечным точкам на том же хосте.
Подробная информация о настройках прокси-сервера также находится в разделе Настройка файла конфигурации веб-разработки .
Расширенная поддержка горячей перезагрузки в Веб
Горячая перезагрузка с сохранением состояния теперь включена по умолчанию при запуске -d web-serverFlutter и открытии ссылки на приложение в браузере. Это работает даже при одновременном подключении нескольких браузеров.
Как и в случае с -d chrome, эту функцию можно временно отключить с помощью --no-web-experimental-hot-reloadфлага. Возможность отключения этой функции будет удалена в будущем выпуске, поэтому, если у вас возникнут проблемы в процессе разработки, пожалуйста, сообщите об ошибке, используя шаблон Dart для горячей перезагрузки . Подробнее см. в документации по горячей перезагрузке .
Фреймворк
В этом выпуске реализован ряд мощных новых возможностей и усовершенствований во всей структуре, что дает разработчикам более детальный контроль над расширенным пользовательским интерфейсом, навигацией и взаимодействием с платформой.
Разработчики теперь имеют больше возможностей для создания всплывающих окон, диалоговых окон и других плавающих элементов пользовательского интерфейса с помощью OverlayPortal. Теперь можно визуализировать дочерний элемент в любом месте Overlayдерева виджетов с помощью OverlayPortal.overlayChildLayoutBuilder( #174239 ), что упрощает отображение уведомления на уровне приложения или другого элемента пользовательского интерфейса, которому требуется избежать ограничений макета родительского виджета. Базовый метод Overlay.of также стал более надёжным и эффективным ( #174315 ).
Для более современной навигации на Android предиктивные переходы по маршруту «назад» теперь включены по умолчанию в MaterialApp( #173860 ). При выполнении жеста «назад» пользователь видит предварительный просмотр главного экрана, в то время как текущий маршрут анимируется. Кроме того, переход по страницам по умолчанию был обновлён на FadeForwardsPageTransitionsBuilder с ZoomPageTransitionsBuilder, чтобы отразить нативное поведение.
В этом выпуске также улучшена интеграция с рабочим столом. В Windows разработчики теперь могут получать доступ к списку подключенных дисплеев и запрашивать подробные свойства каждого из них, такие как разрешение, частота обновления и физический размер ( #164460 ). Это позволяет создавать приложения с развитыми функциями управления окнами.
Наконец, сам фреймворк стал более устойчивым. Ошибки, возникающие в обратных вызовах жизненного цикла виджетов (например, didUpdateWidget), теперь обрабатываются более корректно, предотвращая каскадные сбои в дереве элементов ( #173148 ). ResizeImageТеперь корректно реализовано равенство, что делает кэширование и сравнение изображений более предсказуемыми, гарантируя, что одинаковые ResizeImageпоставщики обрабатываются одинаково ( #172643 ).
В веб-интерфейсе продолжается работа над улучшением пользовательского интерфейса, в результате RSuperellipse устраняются ошибки рендеринга, когда радиусы углов больше самого виджета ( #172254 ); вместо этого такие случаи будут обрабатываться для создания ожидаемой формы таблетки.
Для пользователей из разных стран определение предпочитаемой локали браузера теперь стало более надёжным. Движок теперь использует стандартный Intl.Localeвеб-API для анализа языков браузера, заменив предыдущую ручную и более уязвимую реализацию ( #172964 ). Это изменение обеспечивает более надёжное определение локали и улучшает пользовательский опыт для международной аудитории.
Исправлена специфичная для Android ошибка ( #171973TextField ), затрагивающая в основном устройства Samsung с аппаратными клавиатурами. Ранее после взаимодействия пользователя с редактор метода ввода Android (IME) мог зависнуть в неактивном состоянии. Это приводило к тому, что IME ошибочно перехватывал нажатия клавиш «Enter» или «Space», предотвращая получение события нетекстовыми виджетами, такими как кнопка Checkboxили Radio.
Исправление обеспечивает InputMethodManagerкорректный сброс при закрытии текстового соединения, очищая неактивное состояние IME и восстанавливая предсказуемое взаимодействие пользователей с аппаратной клавиатурой.
Обновления Material и Cupertino
Библиотеки Material и Cupertino продолжают развиваться, уделяя особое внимание согласованности API и безупречному пользовательскому интерфейсу. Этот выпуск включает в себя масштабную миграцию API, новые возможности виджетов и множество улучшений, упрощающих создание красивых и функциональных пользовательских интерфейсов.
Основываясь на прекращении поддержки MaterialState, этот выпуск продолжает внутреннюю миграцию на более унифицированный WidgetState. Это обеспечивает единообразный и выразительный способ определения внешнего вида виджета в различных состояниях взаимодействия, таких как нажатие, наведение курсора или отключение, и не требует никаких изменений для существующих приложений. Эта миграция была применена к широкому спектру виджетов и их тем, включая IconButton, ElevatedButton, Checkbox, и Switch( #173893 ). Новый API также добавляет мощности и гибкости; например, IconButtonтеперь включает statesControllerсвойство ( #169821 ), которое позволяет программно управлять визуальными состояниями виджета, открывая путь к более настраиваемым и интерактивным дизайнам.
В этом выпуске также представлено несколько новых функций и удобных API. Badge.countКонструктор теперь включает maxCountпараметр ( #171054 ), позволяющий легко ограничить отображаемое количество (например, отображать «99+» вместо «100»).

Для более точного управления жестами InkWellвиджет теперь имеет функцию onLongPressUpобратного вызова ( #173221 ), полезную для запуска действий, которые должны завершаться только тогда, когда пользователь поднимает палец.
Библиотека из Купертино также продолжает движение к повышению точности отображения в iOS. Добавлено CupertinoSlidingSegmentedControlсвойство isMomentary( #164262 ), позволяющее элементу управления запускать действия без сохранения выбора. Для лучшего соответствия нативному поведению iOS, CupertinoSheetтеперь реализован лёгкий эффект «растяжения» при перетаскивании вверх в полностью развёрнутом состоянии ( #168547 ).
Наконец, этот выпуск содержит множество улучшений, улучшающих поведение основных компонентов. Среди основных изменений — исправление для DropdownMenuFormFieldкорректной очистки текстового поля при сбросе формы ( #174937 ), а также обновления для SegmentedButtonулучшения обработки фокуса ( #173953 ) и обеспечения корректного отображения границы виджета в его состоянии ( #172754 ).
Разделительный материал и Купертино
Мы активно занимались планированием отделения библиотек Material и Cupertino от фреймворка. Ниже представлен список обсуждений недавно опубликованных проектных документов.
Улучшение процесса выпуска flutter/packages, который будет включать Material и Cupertino после разделения.
Статус: Решено
Принято решение: Пакетный выпуск одностраничного издания (ПУБЛИЧНО)
Цвета и точечные сокращения
Статус: Решено
Тесты на разъединение
Статус: В процессе
Текст
Статус: В обсуждении
Прокрутка: более надежные и предсказуемые полосы
В этом выпуске представлен ряд исправлений, делающих создание сложных прокручиваемых макетов, особенно тех, которые используют SliverMainAxisGroupи SliverCrossAxisGroup, более надежным и предсказуемым.
Разработчики, использующие эти виджеты для группировки нескольких осколков, обнаружат, что обработка жестов стала более надёжной. Проверка нажатий и других событий указателя на осколках внутри этих групп теперь рассчитывается корректно, гарантируя ожидаемое взаимодействие с пользователем ( #174265 ).
Несколько других исправлений способствуют более точной прокрутке внутри SliverMainAxisGroup. Устранены проблемы с чрезмерной прокруткой при использовании закреплённого заголовка ( #173349 ), вызов showOnScreenдля отображения осколка теперь работает корректно ( #171339 ), а внутренний расчёт смещения прокрутки стал точнее ( #174369 ).
Для разработчиков, создающих пользовательские прокручиваемые представления, новый SliverGrid.listконструктор ( #173925 ) предлагает более понятный способ создания сетки из простого списка дочерних элементов.
В этом выпуске также улучшена навигация фокуса для пользователей клавиатуры и D-pad в сложных макетах. В представлениях с вложенной прокруткой с разными осями прокрутки (например, в вертикальном списке горизонтальных каруселей) навигация по направлению фокуса теперь более предсказуема, что предотвращает неожиданные переходы фокуса между разделами ( #172875 ).
Доступность (Удобство использования): более инклюзивный опыт для всех пользователей
Обеспечение доступности приложений для всех пользователей — краеугольный камень фреймворка Flutter. Этот релиз продолжает эту линию, предоставляя разработчикам больше программного контроля, улучшая взаимодействие с пользователями из разных стран и улучшая доступность основных виджетов.
Для разработчиков сложных приложений в этом выпуске появилась возможность включить специальные возможности по умолчанию в iOS с помощью WidgetsFlutterBinding.instance.ensureSemantics( #174163 ). Отладка проблем с доступностью стала проще, так как теперь debugDumpSemanticsTreeдоступна дополнительная информация о результатах проверки вводимого текста, что помогает быстрее диагностировать проблемы ( #174677 ).
Для расширенной доступности в прокручиваемых представлениях на основе лент теперь доступен новый SliverSemanticsвиджет ( #167300 ). Подобно существующему Semanticsвиджету, разработчики могут использовать его SliverSemanticsвнутри CustomScrollViewдля аннотирования фрагментов дерева лент с определенной семантической информацией. Это особенно полезно для аннотирования заголовков, назначения семантических ролей и добавления описательных меток к лентам для программ чтения с экрана, обеспечивая более понятный и доступный интерфейс для пользователей.
Наконец, продолжается работа над повышением доступности основных виджетов. Виджет CupertinoExpansionTileтеперь доступен по умолчанию ( #174480 ), а также AutoCompleteобъявляет пользователю статус результатов поиска ( #173480 ). Другие улучшения, такие как увеличенные области касания TimePicker( #170060 ), способствуют более удобному использованию сразу после установки.
iOS
Мы рады подтвердить, что Flutter полностью поддерживает последние версии платформ: iOS 26, Xcode 26 и macOS 26, выпущенные в сентябре. Это гарантирует, что вы сможете немедленно приступить к разработке и тестированию своих приложений на новейших операционных системах и инструментах Apple.
Вы, возможно, уже заметили значительное улучшение качества жизни разработчиков iOS, реализованное в последнем релизе Flutter. Оно решает давнюю проблему пользователей: необходимость автоматического запуска приложения Xcode при запуске приложений Flutter на физических устройствах с использованием flutter run. Мы представили новый метод развёртывания с использованием инструмента командной строки Xcode 26, devicectl, для установки, запуска и отладки приложений. Этот переход устраняет необходимость вызова приложения Xcode во время развёртывания и в большинстве случаев использует исключительно инструменты сборки командной строки Xcode. Если у вас возникнут проблемы, вы можете отключить этот метод развёртывания с помощью flutter config --no-enable-lldb-debugging, и, пожалуйста, сообщите нам об этом !
Ранее эта функция зависела от автоматизации Xcode, которая в Xcode 26 стала нестабильной, особенно при выполнении последовательных команд. Если вы сейчас разрабатываете для последних версий Apple, мы настоятельно рекомендуем обновить версию Flutter до 3.38 или выше.
Миграция жизненного цикла UIScene
Flutter 3.38 включает в себя необходимую поддержку жизненного цикла UIScene , предписанного Apple . Это важнейшее проактивное обновление, выпущенное вслед за заявлением Apple на WWDC25: «В релизе, следующем за iOS 26, любое приложение UIKit, созданное с использованием последней версии SDK, должно будет использовать жизненный цикл UIScene, иначе оно не запустится».
Чтобы гарантировать совместимость ваших приложений iOS Flutter и их успешный запуск в будущих версиях iOS, требуется миграция.
Миграция приложений Flutter
Все существующие приложения iOS Flutter должны быть перенесены на новый жизненный цикл. Существует два способа выполнить миграцию:
Ручная миграция: следуйте инструкциям по ручной миграции, представленным на веб-сайте Flutter .
Автоматическая миграция (экспериментальная): включите экспериментальную функцию для автоматической миграции. Она будет включена по умолчанию в будущих версиях. Выполните следующую команду:
flutter config --enable-uiscene-migration
Миграция плагинов Flutter
Плагины Flutter, использующие события жизненного цикла приложения, необходимо обновить для использования событий жизненного цикла UIScene. Разработчикам плагинов следует обратиться к руководству по миграции . Немигрированные плагины будут выдавать предупреждения в будущих версиях.
Миграция встроенного Flutter (необязательно)
Для проектов, в которых Flutter встроен в нативное хост-приложение, миграция необязательна, но настоятельно рекомендуется. Внедрение новых API Flutter UIScene с помощью руководства по миграции «Добавить в приложение» позволяет использовать события жизненного цикла сцены для ваших плагинов, обеспечивая совместимость с экосистемой Flutter.
Android
Совместимость с разм��ром страницы 16 КБ
Обновление до Flutter 3.38 — это необходимая подготовка к выполнению требования Google Play о совместимости с размером страницы 16 КБ . С 1 ноября 2025 года приложения для Android 15 и более поздних версий должны поддерживать страницы размером 16 КБ. Это изменение гарантирует корректную работу приложения на устройствах с большим объёмом оперативной памяти, обеспечивая повышение производительности, например, до 30% более быстрый запуск. Flutter 3.38 обновляет версию Android ndkVersion по умолчанию до NDK r28 — минимально необходимого уровня для нативного кода, обеспечивающего правильное выравнивание для поддержки 16 КБ.
Исправления памяти
Flutter 3.38 устраняет значительную утечку памяти, затрагивающую все приложения Flutter на Android. Эта проблема (появившаяся в версии 3.29.0) возникала, когда Activity уничтожались при выходе, как было задано в настройках разработчика, или когда Activity завершались системой из-за нехватки памяти.
Обновления зависимостей Android
Часто бывает сложно подобрать правильную комбинацию версий зависимостей Android, которая подойдет для вашего приложения, включая Gradle, плагин Android Gradle (AGP), плагин Kotlin Gradle (KGP), Java и другие. Для версии Flutter 3.38 мы протестировали и подтвердили совместимость в нашей среде непрерывной интеграции (CI) со следующим набором версий зависимостей Android:
Java 17 : требуемая минимальная версия для разработки Android на Flutter 3.38.
KGP 2.2.20 : максимальная известная и поддерживаемая версия плагина Kotlin Gradle для инструментария.
AGP 8.11.1 : новейшая версия Android Gradle Plugin, совместимая с KGP 2.2.20.
Gradle 8.14 : эта версия работает с выбранными версиями Java, KGP и AGP. Обратите внимание, что для AGP 8.11.1 требуется версия Gradle 8.13.
Чтобы обеспечить бесперебойную работу вашего приложения во всех версиях Flutter, мы настоятельно рекомендуем использовать переменные уровня API, предоставляемые Flutter SDK, в файлах сборки. Для этой версии настроены следующие значения:
flutter.compileSdkVersion(API 36)flutter.targetSdkVersion(API 36)flutter.minSdkVersion(API 24) или выше
Движок
Наложение производительности
Наложение производительности было переработано для повышения эффективности, что сократило время его рендеринга как на бэкендах Skia, так и на Impeller. Это означает, что вы получаете более точные данные о производительности с меньшими накладными расходами. ( #176364 )
Vulkan и OpenGL ES
Многочисленные исправления и улучшения в бэкендах Vulkan и OpenGL ES повышают стабильность и производительность на более широком спектре устройств. В частности, улучшена обработка кэшей конвейера ( #176322 ), ожидающих завершения ( #173085 ) и переходов макетов изображений ( #173884 ).
Унификация рендерера
Продолжается работа по объединению рендереров CanvasKit и Skwasm. Этот выпуск включает в себя значительный рефакторинг для обеспечения большего количества общего кода между ними, что обеспечит более согласованный интерфейс и более быструю разработку в будущем ( #174588 ).
Объединение потоков
Возможность отказаться от объединения потоков удалена из iOS и Android. Подробнее смотрите в отличном видео об объединении потоков.
DevTools и IDE
Экспериментальные предварительные просмотры виджетов — обновления
В версии Flutter 3.35 появился предварительный просмотр виджетов — экспериментальная функция, готовая к ранним отзывам сообщества. В версии Flutter 3.38 реализованы значительные улучшения в предварительном просмотре виджетов, в том числе:
Интеграция с IDE : наши плагины VSCode и Intellij/Android Studio обновлены и теперь поддерживают предварительный просмотр виджетов. Теперь вы можете просматривать предварительные просмотры прямо в IDE, что делает процесс разработки более удобным.

При использовании в IDE среда предварительного просмотра виджетов по умолчанию настроена на фильтрацию отображаемых предварительных просмотров на основе текущего выбранного исходного файла:

Улучшения тем оформления и элементов управления в среде предварительного просмотра виджетов : среда предварительного просмотра виджетов теперь поддерживает светлый и тёмный режимы, а также настраиваемые цветовые схемы IDE, соответствующие вашей среде разработки. Элементы управления в среде предварительного просмотра виджетов также были скорректированы для экономии пространства, что позволило увеличить доступное пространство для отрисовки превью.

Расширяемость предварительного просмотра : класс аннотаций предварительного просмотра больше не помечен как окончательный и теперь может быть расширен для создания пользовательских аннотаций предварительного просмотра, что позволяет использовать меньше шаблонов для распространенных типов предварительного просмотра.

BrightnessPreviewаннотации.Поддержка MultiPreview : новый
MultiPreviewбазовый класс позволяет создавать несколько вариантов предварительного просмотра из одной пользовательской аннотации.

Группы предварительных просмотров : новый параметр группы в
Previewклассе позволяет группировать связанные предварительные просмотры.

Снижены ограничения на аргументы аннотации @Preview : теперь в качестве аргументов аннотаций поддерживаются приватные константы
Preview. Аргументы функций (такие как обёртка и тема) по-прежнему должны иметь публичные, статически доступные имена.
Предварительный просмотр виджетов пока остаётся экспериментальной функцией, и ваши отзывы играют решающую роль в её будущем. API и пользовательский интерфейс пока нестабильны и будут меняться по мере получения информации от вас.
На основе первых отзывов планируется внести дополнительные улучшения для улучшения предварительного просмотра виджетов, в том числе:
Поддержка инспектора виджетов Flutter DevTools : инспектор виджетов обновляется для поддержки проверки предпросмотров в среде предварительного просмотра виджетов. Мы планируем встроить инспектор непосредственно в средство предварительного просмотра виджетов, что сделает его легкодоступным независимо от вашей среды разработки.
Поддержка нескольких проектов в IDE : средство предварительного просмотра виджетов в настоящее время поддерживает только отображение предпросмотров, содержащихся в одном проекте или рабочей области Pub. Мы активно исследуем возможности поддержки сеансов IDE с несколькими проектами Flutter ( проблема № 173550 ).
Улучшение производительности при запуске : изучаются возможности улучшения производительности с целью сокращения времени первоначального запуска, в том числе:
Запуск предварительно скомпилированной среды предварительного просмотра виджета после первого запуска
Распараллеливание логики обнаружения предварительного просмотра для более эффективной обработки крупных проектов
Для начала ознакомьтесь с документацией и дайте нам знать, что вы думаете!
Прочтите документацию : Начало работы с предварительными просмотрами виджетов Flutter (экспериментальная версия)
Оставьте отзыв : сообщайте о проблемах и предложениях функций в репозитории Flutter GitHub .
Дополнительная информация : для более подробного технического ознакомления см. документ «Архитектура предварительных просмотров виджетов Flutter» .
Важное примечание : известна проблема, из-за которой Widget Previewer может аварийно завершить работу или перестать обновляться после flutter pub get. Если вы столкнулись с этой проблемой, запустите flutter pub get в своем проекте и перезапустите IDE. Подробности см. в #178317 .
Обновления DevTools
Flutter 3.38 содержит исправления некоторых основных проблем, выявленных пользователями в ходе опроса пользователей DevTools 2025 года, в том числе:
Улучшения сетевой панели
Теперь проще понять, когда панель записывает сетевой трафик. ( #9495 )
Исправлены проблемы, связанные с копированием и вставкой сетевых запросов. ( #9472 , #9482 , #9485 , #8588 )
Исправления Flutter Inspector
Исправлена ошибка, из-за которой при выборе виджета иногда открывался исходный код базовой платформы вместо исходного кода пользователя. ( #176530 )
Исправлена ошибка, иногда препятствовавшая взаимодействию с верхними кнопками на панели инспектора. ( #9327 )
Устаревание и критические изменения
В этот выпуск включено несколько важных устаревших функций и критических изменений в рамках продолжающихся усилий по модернизации и улучшению фреймворка Flutter.
Внесены важные изменения в сборку и инструменты, которые могут повлиять на пользовательские скрипты сборки. Файл versionв корне Flutter SDK был удалён в пользу нового flutter.version.jsonфайла, расположенного в bin/cache( #172793 ). Кроме того, этот AssetManifest.jsonфайл больше не генерируется по умолчанию ( #172594 ).
Другие заметные изменения включают в себя:
Для более предсказуемого поведения SnackBar, включающий действие, больше не будет автоматически закрываться ( #173084 ).
Конструктор
OverlayPortal.targetsRootOverlayустарел в пользу более гибкогоOverlayPortal(overlayLocation: OverlayChildLocation.rootOverlay).Некоторые свойства
CupertinoDynamicColor, такие какwithAlphaиwithOpacity, теперь устарели в пользу стандартныхColorметодов ( #171160 ).Для Flutter 3.38 требуется Java 17 как минимальная версия для Android, что соответствует минимальному требованию Gradle 8.14 (выпуск от июля 2025 г.).
Более подробную информацию и рекомендации по переходу на эти и другие изменения можно найти на странице критических изменений .
Аутро
Flutter 3.38 призван сделать вашу повседневную разработку быстрее и приятнее. Эти улучшения направлены на оптимизацию процесса разработки. Мы невероятно благодарны за упорный труд и отзывы каждого участника сообщества, внесшего вклад в этот релиз.
Полный список всех изменений смотрите в подробном описании критических изменений и примечаниях к выпуску. Чтобы получить бесплатный прирост производительности, просто запустите flutter upgrade!