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

Flutter 3.47 Splits Material and Cupertino Into Standalone Packages

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

Flutter's package decoupling means design-system updates no longer gate on framework releases, a model that could accelerate iteration for any team maintaining a custom component library. The Impeller default on desktop signals that Flutter's rendering stack is mature enough for production desktop apps, not just mobile.

Summary

The August release cycle delivered structural overhauls across the major cross-platform frameworks. Flutter 3.47 strips Material and Cupertino from the core SDK, publishing them as standalone `material_ui` and `cupertino_ui` packages on pub.dev. This allows design-system fixes and new components to ship weekly, independent of the quarterly SDK cadence. Impeller also becomes the default renderer on macOS, Windows, and Linux, and Widget Previews graduated to stable.

React Native 0.87 made its Strict TypeScript API the default, generating type definitions directly from source and breaking deep imports from `react-native/Libraries/*`. Metro 0.87 cuts memory usage in half and doubles source-map generation speed. Kotlin Multiplatform's 2.4.20-RC deepens Swift interop by mapping sealed classes to Swift enums and enabling cross-language interface inheritance.

uni-app x completed its self-built rendering engine rollout with Android Steam Mode, achieving coverage across Android, iOS, and HarmonyOS without requiring strong typing. .NET MAUI Preview 7 introduced a cross-platform Passkeys Essentials API and XAML incremental hot reload, both targeting enterprise and developer-productivity scenarios ahead of the .NET 11 release.

Takeaways
Material and Cupertino are now independent pub.dev packages (`material_ui` and `cupertino_ui`), versioned separately from the Flutter SDK.
Impeller is the default rendering engine on macOS, Windows, and Linux starting in Flutter 3.47; Skia requires an explicit opt-out that will be removed later.
Widget Previews reached stable status, allowing instant UI component iteration without a full app build.
React Native 0.87 makes Strict TypeScript API the default, with deep imports from `react-native/Libraries/*` now producing type errors.
Metro 0.87 halves memory consumption and generates source maps twice as fast.
Kotlin 2.4.20-RC maps sealed classes to Swift enums and supports cross-language inheritance, letting Swift code implement Kotlin-defined interfaces.
uni-app x Android Steam Mode completes the self-built renderer rollout across Android, iOS, and HarmonyOS, and drops the strong-typing requirement.
.NET MAUI Preview 7 adds a cross-platform Passkeys Essentials API supporting Android, iOS, macOS, and Windows, plus XAML incremental hot reload.
Flutter's minimum iOS version jumps from 13 to 15, and macOS from 10.15 to 12.
React Native 0.87 adds experimental SwiftPM support as a CocoaPods alternative for iOS.
Conclusions

Decoupling design systems from the core SDK is a packaging strategy that mirrors how the web ecosystem separates component libraries from frameworks, and it pressures competing frameworks to justify why their design systems remain coupled.

Flutter's Impeller default on desktop and Wasm push on web suggest the team is betting that a single rendering stack across all platforms reduces maintenance burden more than platform-specific optimizations increase it.

The convergence on Wasm across Flutter, Kotlin, and other frameworks indicates it is becoming the de facto compilation target for cross-platform web runtimes, not just an experiment.

uni-app x dropping the strong-typing requirement for its Steam Mode reveals a pragmatic trade-off: adoption velocity matters more than type safety when competing against native rendering stacks in the Chinese market.

Concepts & terms
Impeller
Flutter's newer rendering engine that precompiles shaders at build time to avoid runtime jank, now the default on desktop platforms.
Steam Mode (uni-app x)
uni-app x's self-built rendering engine that bypasses platform-native UI components, aiming for consistent rendering across Android, iOS, and HarmonyOS.
Passkeys
A FIDO-based passwordless authentication standard using public-key cryptography, backed by biometrics or device PINs, now available cross-platform in .NET MAUI.
SwiftPM
Swift Package Manager, Apple's native dependency management tool, now experimentally supported as a CocoaPods alternative in React Native and advancing in Flutter's iOS plugin ecosystem.
Sealed Class (Kotlin)
A Kotlin class with a restricted hierarchy where all subclasses are known at compile time; now mappable to Swift enums for exhaustive switch matching in iOS code.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗