跪拜 Guibai
← All articles
Flutter · Client-side · AI Programming

Flutter 3.47 Decouples Material Design and Switches Desktop to Impeller by Default

By 程序员老刘 ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

The Material split and Impeller default are breaking changes disguised as a routine update. Teams that delay migration risk a forced scramble when the old design libraries are deprecated in November and Impeller rollback flags are removed.

Summary

The Material and Cupertino design systems are now independent packages on pub.dev, decoupled from the core SDK for faster, independent updates. A one-click migration command handles the transition, and a compatibility bridge supports apps with dependencies still on the old imports. Localization delegates were also consolidated into a single, simpler call.

On desktop, Impeller replaces Skia as the default rendering engine across macOS, Windows, and Linux. Shader compilation moves to build time, eliminating first-run animation jank, and text rendering uses SDFs for sharper output. Rollback flags exist but are temporary.

Apple platform minimums jump to iOS 15 and macOS 12, and the UIScene lifecycle becomes mandatory for future Xcode 27 builds. Intel Mac hardware is no longer tested, and Swift Package Manager adoption for top iOS plugins has reached 92%, pushing CocoaPods into maintenance mode.

Takeaways
Material and Cupertino design widgets are now standalone `material_ui` and `cupertino_ui` packages on pub.dev, versioned independently from the Flutter SDK.
A single `dart fix --apply --code=migrate_design_widgets` command handles the import migration, though early tooling bugs may require a manual `flutter pub add` step.
`MaterialUiCompatibilityBridge` lets an app adopt the new packages even when some dependencies still reference the old core SDK imports.
Localization setup collapses from three explicit delegates to a single `GlobalMaterialLocalizations.delegates` call.
The old design libraries in the core SDK will be deprecated in the November stable release.
Impeller is now the default rendering engine on macOS (Metal), Windows (Vulkan), and Linux (Vulkan), with SDF-based text rendering for sharper desktop typography.
Temporary opt-out flags exist per platform but will be removed in a future release; any project that must fall back to Skia should file a bug immediately.
iOS minimum deployment target rises from 13 to 15, and macOS from 10.15 to 12.
iOS 27 SDK mandates the UIScene lifecycle; apps with custom `AppDelegate` code or old-lifecycle plugins need manual migration.
Automated testing on Intel Mac hardware has stopped, and building on Intel now prints a deprecation warning that will become an error.
92 of the top 100 iOS plugins have migrated to Swift Package Manager; CocoaPods is in maintenance mode.
Flutter Widget Previews reached stable, with project caching, a `PreviewThemeData` API for theme matrix testing, and automatic web resource syncing.
WebAssembly lazy loading landed as an experimental feature to improve web app first-screen load times by splitting Wasm modules.
Conclusions

The Material split is a long-term architectural play that trades short-term migration pain for a faster, independent release cadence on design components, which matters more for plugin authors than app developers.

Making Impeller the default on all three desktop platforms simultaneously signals confidence in its stability after a long mobile-only incubation, but the temporary rollback flags are an admission that edge cases still exist.

The iOS 27 UIScene mandate is a hard deadline with no workaround for App Store distribution; the only variable is when a team chooses to absorb the cost.

SwiftPM reaching 92% adoption among top plugins and CocoaPods entering maintenance mode closes the window on waiting for the ecosystem to mature; the migration is now a when-not-if problem.

Widget Previews hitting stable, combined with the GenUI package updates, shows Flutter quietly investing in tooling for both manual UI development and AI-driven UI generation simultaneously.

Concepts & terms
Impeller
Flutter's next-generation rendering engine that replaces Skia. It pre-compiles shaders at build time to eliminate runtime shader compilation jank and uses platform-native graphics APIs (Metal on macOS, Vulkan on Windows/Linux) to draw directly.
SDF (Signed Distance Function)
A technique for rendering text and vector graphics by representing shapes as distance fields, producing sharp, resolution-independent curves. Impeller uses SDFs for desktop text rendering.
UIScene Lifecycle
Apple's modern app lifecycle model for UIKit, introduced in iOS 13, that supports multiple windows and scenes. The iOS 27 SDK makes it mandatory, breaking apps that still use the older AppDelegate-only lifecycle.
Swift Package Manager (SwiftPM)
Apple's native dependency management tool for Swift projects. Flutter is migrating iOS plugins from CocoaPods to SwiftPM, with CocoaPods now in maintenance mode.
WebAssembly (Wasm)
A binary instruction format that runs in browsers at near-native speed. Flutter is pushing Wasm as the default compilation target for web apps, replacing JavaScript-based output for better performance.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗