← На главную

Flutter 3.47 вынес Material и Cupertino в material_ui и cupertino_ui

12.08.2026 23:46 · hackernews

Вышел Flutter 3.47. Главное событие — дизайн-системы Material и Cupertino наконец отделили от ядра SDK. Пакеты material_ui и cupertino_ui получили версию 1.0 и теперь живут на pub.dev. Они обновляются по собственному графику, раз в неделю, не дожидаясь квартальных релизов Flutter. Миграция в одну команду: dart fix --apply --code=migrate_design_widgets. Если инструмент не справится с pubspec.yaml (известный ранний баг), нужно вручную выполнить flutter pub add material_uicupertino_ui для Cupertino), а затем снова запустить dart fix. Для переходного периода есть MaterialUiCompatibilityBridge: он позволяет вашему приложению использовать новые пакеты, даже если зависимости ещё тянут старые импорты из core SDK. Локализации тоже развязали: GlobalMaterialLocalizations.delegates теперь включает всё необходимое, а flutter_localizations больше не нужен в старом виде. Старые библиотеки в SDK формально объявят устаревшими в ноябрьском релизе.

Дальше — подготовка к Apple. Flutter 3.47 поддерживает Xcode 27, iOS 27 и macOS 27, но минимальные версии подняли: для iOS теперь нужно 15, для macOS — 12. iOS 27 требует UIScene lifecycle для всех UIKit-приложений, иначе они не запустятся. Flutter CLI обычно мигрирует сам, но если у вас кастомный AppDelegate или старые плагины — придётся вручную. Intel Mac выводят из поддержки: тесты отключены, CLI предупреждает при сборке. Можно сразу включить сборку только под ARM64 командой flutter config --enable-macos-arm64-only. Swift Package Manager: 92 из топ-100 iOS-плагинов уже мигрировали, CocoaPods в режиме поддержки, немаргирированые плагины со временем не будут работать.

Web: Flutter готовится включить Wasm по умолчанию. Пока можно тестировать через flutter build web --release --wasm. Код надо перевести на package:web, так как dart:html не поддерживается. Экспериментально появился отложенный loading Wasm-модулей — --enable-wasm-deferred-loading.

Impeller стал рендерером по умолчанию на macOS, Windows и Linux. Он компилирует шейдеры заранее и убирает stutter при первом воспроизведении анимации. На macOS Wide Gamut Color включён по умолчанию. Временные отключения — через флаги, но их скоро уберут.

Десктопные окна: в партнёрстве с Canonical добавили попап-окна на Linux и Windows, доступ к windowHandle (HWND, NSWindow, GtkWindow), исправили фокусные баги, появился API для автоматического размера окна по контенту. Windows и Linux получили flavors — можно задавать разные ассеты для разных flavor в pubspec.yaml. Текст на десктопе теперь рендерится через Signed Distance Function, что даёт более чёткие буквы на низких плотностях пикселей.

Flutter Widget Preview стал стабильным: быстрый рендер отдельных виджетов без запуска всего приложения, кэширование в .widget_preview/, абстрактный PreviewThemeData.

Пакет genui обновился до 0.10.0: появился a2ui_core с классами протокола и поддержка клиентских функций A2UI.

Ещё куча мелких правок: на Android починили залипание Shift при виртуальной клавиатуре, улучшили accessibility (автоопределение high contrast и invert colors), стабильные selection handles, фиксы для SelectableRegion, EdgeDraggingAutoScroller уважает ScrollPhysics, код-сайн на iOS стал прозрачнее, корейский текст на Windows корректно позиционируется, плагины Linux получили stylus rotation и pressure.

Версии сборки для Android: Java 17, Kotlin Gradle Plugin 2.4.0, AGP 9.1.0, Gradle 9.3.1, flutter.compileSdkVersion и targetSdkVersion — API 36.

Обновляйтесь через flutter upgrade и загляните в Breaking Changes, чтобы подготовиться к миграции на standalone-пакеты.

Читать оригинал →