What's New in Flutter 3.47

Aug 13, 2026 06:46 AM - 1 hour ago 3
What's caller successful Flutter 3.47 What's caller successful Flutter 3.47

Flutter 3.47 is here, and pinch it, we’ve sewage immoderate breathtaking caller updates.

Today, we invited the 1.0 merchandise of the standalone material_ui and cupertino_ui packages. This is simply a awesome milestone that decouples creation systems from the halfway SDK.

We’re besides boosting capacity and tooling crossed the board. This merchandise brings Impeller to desktop by default, prepares our pipelines for iOS, macOS, and Xcode 27, and graduates Flutter Widget Previews to stable.

So, tally flutter upgrade successful your terminal to get started, aliases publication connected to study much astir the awesome changes successful this release.


Choose your ain UI adventure

The first measurement toward a decoupled Flutter is here: Material and Cupertino are now disposable arsenic standalone packages!

One of Flutter’s top strengths is its ability to render pixel-perfect Material and Cupertino widgets. However, because these creation libraries were historically bundled straight wrong the halfway SDK, it slowed down their improvement and made it harder to contribute aliases support them up to date.

While the halfway SDK still includes these libraries for this release, you tin now opt-in to the standalone material_ui and cupertino_ui packages, which person officially reached type 1.0 connected pub.dev.

Decoupling creation roadmaps (Opt-in)

By opting into the decoupled creation systems, you summation power complete your creation roadmap. Because material_ui and cupertino_ui now unrecorded connected pub.dev, they tin vessel bug fixes and caller components connected their ain play schedules, independent of the quarterly Flutter SDK releases.

Decoupling the creation systems gives america the pursuing benefits:

  • You tin usage the latest Cupertino and Material widget styles without being forced to upgrade your full Flutter SDK version.
  • We tin onshore contributions and updates faster and much frequently.
  • We laic the groundwork for a style-neutral Flutter halfway widget catalog, making it easier to build civilization creation systems successful the future.

How to migrate

To migrate your task to the caller standalone packages, tally the pursuing command:

bash

dart hole --apply --code=migrate_design_widgets

This instrumentality automatically updates your imports from package:flutter/material.dart and package:flutter/cupertino.dart to the caller standalone packages.

Note: If the migration instrumentality encounters issues updating your pubspec.yaml (a known early bug), you tin resoluteness it by manually moving flutter pub adhd material_ui (and cupertino_ui if you usage it), past moving dart hole --apply erstwhile more.

The original creation libraries wrong the halfway SDK are scheduled for general deprecation successful the upcoming Fall unchangeable release successful November. If you are migrating a package successful the ecosystem, dainty this move to the standalone packages arsenic a awesome release.

Bridging the migration gap

To facilitate bridging the spread arsenic the ecosystem migrates to the caller standalone creation libraries, material_ui and cupertino_ui vessel pinch migration utilities. The MaterialUiCompatibilityBridge allows your exertion to migrate to the standalone packages immediately, moreover if immoderate of your package dependencies are still utilizing bequest halfway SDK imports.

For example, you tin wrap your app successful the compatibility bridge:

dart

import 'package:material_ui/material_ui.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF6750A4)), ), builder: (BuildContext context, Widget? child) { return MaterialUiCompatibilityBridge(child: child!); }, home: const HomeScreen(), ); } }

Decoupled localizations

As portion of this transition, flutter_localizations has besides been unbundled. Localization delegates and translated strings for Material and Cupertino widgets now reside wrong package:material_ui and package:cupertino_ui respectively.

Before:

dart

import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter/material.dart'; // ... localizationsDelegates: const <LocalizationsDelegate<dynamic>>[ GlobalCupertinoLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ],

After:

dart

import 'package:material_ui/material_ui.dart'; // ... localizationsDelegates: GlobalMaterialLocalizations.delegates,

Setting localizationsDelegates to GlobalMaterialLocalizations.delegates now includes the Cupertino and Widgets delegates arsenic well, simplifying your setup.

Architectural sketch showing the unbundling of packages Decoupling localization structure

Open for contribution

By freezing contributions to the Material and Cupertino libraries backmost successful April, we’ve been capable to guarantee a soft migration. The libraries waiting for you successful material_ui and cupertino_ui are the aforesaid libraries you are already using.

Now that we are fresh to assistance the freeze, look guardant to much fixes and features rolling out connected a regular ground successful the caller packages, pinch releases presently planned to onshore weekly. We are besides excited to officially unfastened these packages for organization contributions.


Prepping for the adjacent activity of Apple updates

With Xcode 27, iOS 27, and macOS 27 arriving this fall, we person focused heavy connected making judge Flutter is fresh for the upcoming updates. To guarantee your users don't acquisition day-one surprises, we urge testing your apps against the Apple betas now.

Additionally, to support Xcode 27, the minimum supported OS versions person been bumped:

PlatformPrevious minimumNew minimum (Flutter 3.47+)
iOS1315
macOS10.1512

UIScene lifecycle mandate

The iOS 27 SDK now mandates the UIScene lifecycle for each UIKit-based apps. Apps built pinch Xcode 27 that do not adopt UIScene will neglect to motorboat connected startup.

For astir apps, the Flutter CLI handles this migration automatically during the build. However, manual migration is required if you person civilization autochthonal codification successful your AppDelegate aliases usage plugins that still trust connected the bequest exertion lifecycle. In those cases, you must migrate manually by pursuing the UIScene/Delegate Adoption Guide.

Phasing retired Intel Macs

In alignment pinch Apple's modulation to Apple Silicon, Flutter is winding down support for Intel-based Macs. We person abnormal automated trial runs connected Intel hardware, and the Flutter CLI now prints warnings erstwhile building connected Intel hosts aliases targeting dual architectures. These warnings will go errors successful a early release.

You tin opt successful to building ARM64-only macOS apps instantly by moving flutter config --enable-macos-arm64-only.

Swift Package Manager progress

The organization has made unthinkable advancement transitioning to Swift Package Manager, pinch 92 of the apical 100 iOS plugins now migrated. If you antecedently turned Swift Package Manager off, you tin effort it again by moving flutter config --enable-swift-package-manager.

Because CocoaPods is now successful attraction mode, plugins that do not migrate to SwiftPM will yet extremity working. Unmigrated plugins besides person little pub.dev scores. If you support a plugin, consult the Migration Guide and publication our previous blog post for much details.

This merchandise besides features optimized build times, acknowledgment to organization contributor @lukemmtt, who improved build pipelines by filtering retired unnecessary SwiftPM package schemes early successful the build process.


Setting people for Wasm by default

We are actively moving toward enabling WebAssembly (Wasm) by default for Flutter web applications, bringing native-like capacity to the browser. If you haven’t tested your web apps pinch Wasm yet, you tin opt-in coming by passing the --wasm emblem to your merchandise build command:

bash

flutter build web --release --wasm

As you hole for this transition, support successful mind that Wasm requires migrating your codebase to the caller JS interop package (package:web), arsenic the bequest dart:html room is not supported. Upgrading your project’s package limitations often resolves these legacy interop issues automatically.

To thief standard larger web applications, this merchandise besides introduces experimental support for deferred loading connected Wasm. Available nether a emblem connected the main channel, this allows you to divided your Wasm exertion into smaller, lazy-loaded modules, optimizing first load times:

bash

flutter build web --release --wasm --enable-wasm-deferred-loading

Modern graphics get connected the desktop pinch Impeller

We are committed to making desktop platforms first-class targets for high-performance graphics. In Flutter 3.47, Impeller becomes the default renderer for macOS, Windows, and Linux.

If you are caller to Impeller, it is Flutter’s next-generation rendering engine, built from the crushed up to switch Skia. By targeting modern hardware APIs (like Metal connected macOS and Vulkan connected Windows and Linux), Impeller compiles a fixed group of shaders astatine build clip alternatively than compiling them dynamically astatine runtime. This eliminates the little stutter, called shader compilation jank, the first clip an animation plays, delivering consistently soft transitions from the very first frame. Learn much successful the Impeller rendering motor documentation.

If you request to temporarily opt retired of Impeller, travel these steps:

  • macOS: Set FLTEnableImpeller to mendacious successful Info.plist.
  • Windows: Add project.set_impeller_switch(flutter::ImpellerSwitch::Disabled) successful main.cpp.
  • Linux: Call fl_dart_project_set_enable_impeller(project, FALSE) successful my_application.cc.

Fallback options will beryllium removed successful a early release, truthful record bugs if you must revert to utilizing Skia. Additionally, Wide Gamut Color is now progressive by default connected macOS, delivering rich, vibrant, and precise colour rendering connected supported hardware.

Experimental multi-window Progress

In business pinch Canonical, and acknowledgment to maintainers @robert-ancell and @mattkae, we are expanding our experimental desktop windowing APIs. Linux and Windows now support popup windows, allowing you to build autochthonal discourse menus and inferior palettes.

Popup windows connected Win32 Popup windows connected Win32

You tin besides now query windowHandle connected platform-specific controllers to get a nonstop pointer to the underlying autochthonal window (HWND, NSWindow, aliases GtkWindow). This enables precocious autochthonal characteristic entree for illustration dockable panes connected Windows, specified arsenic this dockable panes demo contributed by @orestesgaolin:

Dockable Panes demo Dockable Panes demo

We besides resolved respective model attraction and realization bugs. On Windows, activating a model nary longer pulls inheritance windows forward aliases steals attraction backmost connected app resume, courtesy of contributor @9AZX:

Window attraction and realization hole connected Windows Window attraction and realization fix

On Linux, multi-window creation now explicitly realizes windows earlier they person their first framework from the compositor, fixing early rendering warnings and compositor assertions.

We besides added a caller sized-to-content API that lets you create regular and dialog windows that are automatically sized to fresh their content.

Flavors for desktop

Windows and Linux now support Flutter flavors.

For example, your pubspec.yaml record tin usage different assets connected different flavors:

yaml

flutter: assets: - path: assets/flavor_a/images flavors: - flavor_a - path: assets/flavor_b/images flavors: - flavor_c

Use the --flavor action to specify your flavor. For example:

  • flutter build windows --flavor flavor_a
  • flutter build linux --flavor flavor_a

Thanks to @AngeloAvv for the awesome contributions!

  • https://github.com/flutter/flutter/pull/187034
  • https://github.com/flutter/flutter/pull/187029

Sharper desktop text

Desktop screens often person little pixel densities than mobile displays but person much graphics compute power. To present sharper matter and cleaner vector curves connected desktop, the Flutter motor utilizing Impeller now utilizes Signed Distance Function (SDF) rendering connected macOS, Linux, and Windows.


Stable previews and updates to GenUI

Widget Previews spell stable

Flutter Widget Preview is now stable, allowing you to instantly render, inspect, and iterate on individual UI components without building aliases launching your full application.

With this unchangeable release, you tin expect:

  • Faster startup times acknowledgment to section task caching successful a .widget_preview/ folder, which eliminates repeated setup overhead.
  • More elastic testing pinch an absurd PreviewThemeData API that supports sequential taxable layering for analyzable matrix tests.
  • Automatic web plus synchronization erstwhile previewing web widgets, copying your big project's web/ assets directly, applying immoderate civilization theming aliases customizing your index.html file erstwhile utilizing Flutter web automatically.

Continued advancements successful GenUI

Flutter's ecosystem continues evolving to meet the needs of developers utilizing GenUI to create caller kinds of agentic experiences for their users. Version 0.10.0 of the genui package was precocious released, bringing a number of fixes and caller features, among them:

  • A caller a2ui_core package that centralizes classes related to the protocol, including things for illustration expressions, catalog entries, and more.
  • Support for A2UI's client-side functions, which alteration you to supply the supplier pinch functions it tin direct the customer to usage for validation, derived values, and different mini tasks without a information trip.

Refining the level experience

This conception highlights targeted improvements contributed by the community and the Flutter squad to polish the developer and personification experience crossed each platforms.

Android

On Android, we’ve resolved a virtual keyboard issue wherever modifier keys (like Shift) could get stuck during events. The cardinal responder now skips beingness cardinal synthesis for virtual keyboard inputs, keeping keyboard interactions clean.

Android dependency matrix

To guarantee unchangeable builds, Flutter 3.47 is verified against the pursuing Android dependency versions:

  • Java: 17 (minimum required version)
  • Kotlin Gradle Plugin (KGP): 2.4.0
  • Android Gradle Plugin (AGP): 9.1.0 (newest compatible pinch KGP 2.4.0)
  • Gradle: 9.3.1 (minimum required for AGP 9.1.0)

To guarantee your exertion builds successfully crossed early releases, we promote you to usage the modular API level variables vended by the Flutter SDK successful your build files. For this release, they are configured pinch the pursuing default values:

  • flutter.compileSdkVersion (API 36)
  • flutter.targetSdkVersion (API 36)
  • flutter.minSdkVersion (API 24)

iOS and macOS

For iOS developers, codification signing is now much transparent. Thanks to organization personnel @alex-medinsh, the CLI displays some the Team ID and Team Name erstwhile selecting a certificate.

Additionally, organization member @mozammal-hossain improved troubleshooting by providing clearer provisioning profile correction messages erstwhile signing fails.

Desktop

Desktop platforms besides received targeted refinements. Caret positioning for Korean matter creation is resolved connected Windows (thanks to @CHOIgoung), and Windows plugins tin now move costly tasks disconnected the level thread utilizing FlutterEngine::PostPlatformThreadTask. On Linux, @CodeDoctorDE added stylus rotation and unit reporting.

Graphics and engine

In the engine, part shaders targeting OpenGLES nary longer need conditional coordinate flipping erstwhile reference textures. This is now handled successful the vertex shader. See the OpenGLES render-to-texture breaking alteration page for much details.

Framework polish

Finally, the model itself is smoother, pinch improvements divided crossed cardinal components:

Accessibility and semantics: Android high-contrast and colour inversion settings are now detected automatically, acknowledgment to @xxxOVALxxx (MediaQueryData.highContrast and MediaQueryData.invertColors). Nested matter spans wrong Text.rich now lucifer their layout sequence successful the semantics tree, and keyboard attraction blocking is added for BlockSemantics.

Android accessibility settings Android accessibility settings

Text and selection: Text action handles connected mobile now stay stable during insignificant scrolling, and keyboard shortcuts tin now disregard unfastened action menus. On Android, action handles nary longer obscure the discourse menu erstwhile positioned adjacent the apical of the screen, acknowledgment to @JhonaCodes.

We besides fixed a clang successful SelectableRegion erstwhile action began successful an quiet scrollable container, and resolved ocular item artifacts connected faded selectable text, acknowledgment to @ikramhasan.

Gestures and scrolling: Improved motion propagation for autochthonal iOS views embedded via level views. EdgeDraggingAutoScroller now respects the ScrollPhysics of the progressive scroll view, preventing auto-scrolling connected locked lists.

EdgeDraggingAutoScroller demo EdgeDraggingAutoScroller demo

Core Widget enhancements: Preserve original colors wrong ImageIcon pinch useOriginalColors: true, specify clipping behavior successful AnimatedCrossFade, and way image watercourse errors directly pinch ImageStreamListener.


Ready to upgrade

The pieces are set, and the foundations are ready. All that's near is to bring these upgrades to your section machine:

While your SDK updates successful the background, we've sewage immoderate homework (the nosy kind) for you:

  • Meet the Contributors: Grab immoderate popcorn and tune into our caller video series, Introducing: Flutter Notable Commits, celebrating the organization members who made this merchandise possible.
  • Check the Details: Give the Breaking Changes Page a speedy scan truthful you are prepped for the standalone UI package migrations.

We are excited to spot what you each will build pinch this caller and improved type of Flutter!

More