Вышла новая версия
Flutter 3.47. Обновление заметное.
Material и
Cupertino наконец-то выехали из
SDK в отдельные пакеты.
Impeller стал рендерером по умолчанию на десктопе. Плюс подготовка к осенним обновлениям
Apple и другие улучшения. Давайте разберем все основные изменения.
Material и Cupertino теперь отдельные пакеты:
Главное изменение:
Material и
Cupertino больше не встроены в
SDK. Теперь это отдельные пакеты на
pub.dev:
material_ui и
cupertino_ui. Это значит, что обновления виджетов теперь могут выходить независимо от релизов
Flutter.
Пока это опционально. Старые импорты из
package:flutter/material.dart все еще работают, но они объявлены устаревшими и будут удалены в ноябре.
Для миграции достаточно выполнить команду:
dart fix --apply --code=migrate_design_widgets
После этого импорты обновятся автоматически. Если что-то пошло не так, можно добавить пакеты вручную:
flutter pub add material_ui
flutter pub add cupertino_ui
Важный момент для пакетов с зависимостями: если вы еще не обновились, а ваши зависимости уже используют новый подход, поможет
MaterialUiCompatibilityBridge.
Также вместе с UI-пакетами разобрали
flutter_localizations. Теперь делегаты локализации живут внутри
material_ui и
cupertino_ui, а не в отдельном пакете.
Подготовка к iOS 27 и macOS 27:
Apple осенью выпустит
Xcode 27 с новыми требованиями. Минимальная версия
iOS поднята до
15,
macOS до
12.
iOS 27 SDK требует жизненного цикла
UIScene. Приложения без него не запустятся на новых устройствах.
Для большинства проектов
CLI мигрирует автоматически. Но если в проекте есть кастомный
AppDelegate, придется править руками. Лучше проверить сейчас.
Также
Flutter постепенно сворачивает поддержку
Intel Mac. В этой версии только предупреждения, но в будущем сборка на
Intel перестанет работать. Можно уже сейчас переключиться на
ARM64-only:
flutter config --enable-macos-arm64-only
По
Swift Package Manager прогресс: 92 из топ-100 плагинов уже перешли на
SPM. Если вы еще не включили
SPM, можно попробовать:
flutter config --enable-swift-package-manager
Impeller теперь на десктопе по умолчанию:
Impeller стал рендерером по умолчанию на
macOS,
Windows и
Linux. Если вы не знаете, что это - новый рендеринг-движок, который компилирует шейдеры на этапе сборки, а не в рантайме. Это решает проблему шейдерных джанков. Первая анимация работает так же плавно, как и все последующие.
На
macOS также включили
Wide Gamut Color - более насыщенные и точные цвета.
Отключить
Impeller можно, но в будущих версиях опция будет удалена.
Flavors для десктопа:
Flavors, которые работали на мобилках, теперь доступны и на
Windows и
Linux. Можно использовать разные ассеты и настройки для разных окружений.
flutter build windows --flavor production
flutter build linux --flavor staging
Экспериментальный многооконный режим тоже доработали. На
Windows и
Linux появились popup-окна. Можно делать контекстные меню и палитры.
Widget Previews вышли в stable:
Виджет-превью стали стабильными. Теперь можно рендерить отдельные компоненты без сборки всего приложения. Кэш сохраняется в
.widget_preview/, так что повторные запуски быстрее. Есть поддержка нескольких тем для тестирования и синхронизация веб-ассетов.
Вывод:
Flutter 3.47 - важное обновление. Главное -
Material и
Cupertino выехали из
SDK. Это упростит обновления виджетов и снизит зависимость от релизов
Flutter.
Impeller на десктопе - большой шаг для производительности.
Flavors и многооконный режим делают десктоп-разработку более гибкой. А подготовка к осеннему релизу
Apple заставляет проверить проекты на совместимость.