Flutter 3.44 froze Material and Cupertino: the material_ui migration guide for 2026

Flutter froze Material and Cupertino on April 7, 2026; they now ship as material_ui and cupertino_ui on pub.dev.

Read time
9 min
Word count
1.3K
Sections
8
FAQs
8
Share
A glowing monolithic block separating into three smaller modular floating blocks
Material and Cupertino now version independently of the Flutter SDK.
On this page · 8 sections
  1. What actually changed
  2. The migration
  3. Why the Flutter team did this
  4. What to do this quarter
  5. India-specific considerations
  6. FAQ
  7. How eCorpIT can help
  8. References

Summary. As of April 7, 2026, all contributions to the Material and Cupertino libraries in flutter/flutter are frozen. The libraries move to pub.dev as two independently versioned packages, material_ui and cupertino_ui. Flutter 3.44 reached the stable channel in May 2026 and still accepts package:flutter/material.dart, but the import now raises a deprecation warning. By the next stable release, the in-SDK copies are deprecated. Flutter ships four stable releases in 2026, in February, May, August and November, which puts the deprecation milestone at the August 2026 release and gives most teams one quarter of comfortable runway. The work started in late 2025 and finishes during 2026. The migration itself is mechanical: change two import lines and pin two packages. The reason to care is not the import. It is that Material bug fixes stop waiting for a quarterly SDK release.

What actually changed

Three separate things happened, and conflating them causes most of the confusion.

The libraries were frozen. Since April 7, 2026, nobody merges Material or Cupertino changes into flutter/flutter. The code in your SDK is final. If you upgrade your SDK again, that Material and Cupertino code does not change, because it is frozen rather than merely stable.

The canonical home moved. package:flutter/material.dart and package:flutter/cupertino.dart now live as the material_ui and cupertino_ui packages on pub.dev. The code also moved into the flutter/packages repository.

The old copies entered a deprecation window. In 3.44 the existing imports still work and emit a deprecation warning. By the next stable release the in-framework versions are deprecated, and the old code is deleted some time after that.

Phase What happened When
Phase 1 Logic migration and refactoring of the widgets library Late 2025
Phase 2 Relocating the libraries to new packages on pub.dev Early 2026
Code freeze All Material and Cupertino contributions to flutter/flutter stopped April 7, 2026
Flutter 3.44 stable Old imports work, deprecation warning appears, SwiftPM becomes the default May 2026
Phase 3 In-SDK versions deprecated; migration expected Next stable release after 3.44
Deletion Old Material and Cupertino code removed Some time after deprecation

The migration

The swap is mechanical. That is the good news and it is genuinely most of the work.

Add the packages to pubspec.yaml:


            dependencies:
  flutter:
    sdk: flutter
  material_ui: ^1.0.0
  cupertino_ui: ^1.0.0
          

Then change the imports:


            // Before
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

// After
import 'package:material_ui/material_ui.dart';
import 'package:cupertino_ui/cupertino_ui.dart';
          
What you touch Before After
Material import package:flutter/material.dart package:material_ui/material_ui.dart
Cupertino import package:flutter/cupertino.dart package:cupertino_ui/cupertino_ui.dart
pubspec dependency None; came with the SDK material_ui: ^1.0.0, cupertino_ui: ^1.0.0
Who ships Material fixes The quarterly Flutter SDK release pub.dev, whenever they land
Version you are pinned to Whatever your Flutter SDK carries Whatever you pin, independent of the SDK

The recommended sequence, per the Flutter team's own guidance: first do a normal SDK migration to 3.44 or above on any channel. Once you are there, you hold a frozen copy of Material and Cupertino that will not shift under you even if you upgrade the SDK again. That frozen copy is your safety net. Migrate the imports from a stable base rather than while chasing an SDK upgrade at the same time.

For a large codebase, a project-wide find and replace on the two import strings covers the bulk of it. Run your analyzer afterwards and expect the residue to be in generated files, conditional imports and any package that re-exports Material.

Why the Flutter team did this

The stated reasons hold up, and one of them is worth real money on a large app.

Material and Cupertino updates stop waiting for the SDK. Under the old arrangement, a bug in a Material widget meant waiting for a full Flutter stable release to get the fix. With separate packages, fixes ship independently. Given that Flutter ships four stable releases in 2026, the worst-case wait for a Material fix was roughly a quarter. Now it is however long the fix takes.

You can upgrade design without upgrading the SDK. If a project constraint pins you to an older Flutter SDK, you can still upgrade the design packages and get the current look and feel. Anyone who has been stuck on an old SDK because one native plugin was not ready will recognise why that matters.

App size drops. The modular approach shrinks app size, because you ship the design system you use rather than both design systems that happened to be in the framework.

The team can react when Apple or Google shift design. Versioned packages let Material and Cupertino follow a platform redesign without waiting for a framework release cycle.

The independent versioning is the point. The import change is the price.

What to do this quarter

The deprecation lands at the next stable release, which the 2026 roadmap puts in August. That is the date to plan against.

Migrate to Flutter 3.44 first if you have not. It reached stable in May 2026 and carries a second significant change: Swift Package Manager is now the default for iOS and macOS builds. flutter create no longer generates a Podfile, plugins resolved through pub get a Package.swift shim, and Xcode opens the project as a Swift package graph directly. If your iOS build has custom CocoaPods work in it, budget for that separately. It is a bigger job than the import swap and it is easy to discover at the wrong moment. Our Flutter 3.44 widget previewer and Create with AI piece covers the rest of that release.

Then do the imports. On most codebases this is a morning, not a sprint.

Then pin deliberately. material_ui: ^1.0.0 gives you Material updates as soon as they land on pub.dev, decoupled from whatever Dart SDK version your CI runs. That is the benefit and it is also a new surface: your UI can now change without an SDK upgrade in the changelog. Teams that want tighter control should pin exactly and upgrade on purpose. Teams that want current design should take the caret and watch the package changelog. Pick one deliberately rather than inheriting the default.

Then check your dependencies. Any package that re-exports Material has to migrate too. A well-maintained package will have done it. An abandoned one will not, and that is where a one-morning migration turns into a two-week one. Audit your pubspec before you promise a date.

India-specific considerations

For Indian development teams and the app studios in Gurugram, Bengaluru and Pune running many client codebases at once, this migration has a particular shape.

The work scales with codebase count, not codebase size. A studio maintaining 20 client Flutter apps does the same small migration 20 times, and the long tail is dependency audits rather than import swaps. Batch the audit across the portfolio first, because the same abandoned package will block several apps and you only want to find it once.

App size reduction is worth more here than in a US-first app. Install conversion is sensitive to download size on constrained networks and entry-level Android devices, which is the majority of the Indian market. If the decoupling trims your APK, that is a measurable business number rather than an engineering nicety. Measure before and after; do not assume.

Client contracts need the SwiftPM line item. Fixed-scope agreements written before May 2026 did not price the CocoaPods to Swift Package Manager transition. That conversation is easier before you start than after a build breaks.

For teams weighing the wider stack question, our React Native and Flutter decision framework and our Flutter web and Wasm production guide cover the adjacent decisions.

FAQ

How eCorpIT can help

eCorpIT is a CMMI Level 5 certified technology organisation in Gurugram, and our senior engineering teams build and maintain Flutter applications for clients in India and abroad. We run migrations like this across app portfolios, audit the dependency tail that actually holds them up, and handle the CocoaPods to Swift Package Manager transition that arrived in the same release. If you maintain Flutter apps and want the August deprecation handled before it is urgent, contact us.

References

  1. Flutter's Material and Cupertino code freeze — Justin McCandless, Flutter team
  1. Flutter 3.44.0 release notes — Flutter documentation
  1. What's new in Flutter 3.44 — Flutter blog
  1. Flutter and Dart's 2026 roadmap — Flutter blog
  1. Flutter 3.44 Splits Material and Cupertino Out of the SDK and Defaults to SwiftPM — Start Debugging
  1. Decoupling Material and Cupertino in Flutter: Why It Matters and How to Adapt — freeCodeCamp
  1. Move the material and cupertino packages outside of Flutter, issue 101479 — flutter/flutter on GitHub
  1. Flutter's Big Move: Why Decoupling Material and Cupertino is a Game-Changer — Leenspace
  1. Flutter Roadmap — flutter/flutter on GitHub
  1. Flutter 3.44 Deep Dive: SwiftPM, Android, Web, and Tooling Changes — Sagnik Bhattacharya
  1. Flutter 3.44 Released: A Complete Engineering Guide to What Changed — Simi Studio
  1. Flutter 2026 Review: UI Thread Merge, GenUI, Cross-Platform — Intercode
  1. State of Flutter 2026 — Dev Newsletter
  1. Material and Cupertino Are Getting Their Own Packages — AlexCodeX
  1. Flutter's 2026 Roadmap Just Dropped, and It's All About Finishing the Job — WebArt Design

_Last updated: July 15, 2026._

Frequently asked

Quick answers.

01 What happened to Material and Cupertino in Flutter?
As of April 7, 2026, all contributions to the Material and Cupertino libraries in flutter/flutter are frozen. The libraries were re-released as material_ui and cupertino_ui packages on pub.dev, versioned and updated independently of the Flutter SDK. The code also moved into the flutter/packages repository.
02 Do my existing imports still work?
Yes, in Flutter 3.44. The existing imports continue to work, but you will see a deprecation warning on package:flutter/material.dart. By the next stable release after 3.44, the in-framework versions of these libraries are deprecated, and the old code is deleted some time after that.
03 How do I migrate?
Add material_ui and cupertino_ui to pubspec.yaml, then change package:flutter/material.dart to package:material_ui/material_ui.dart and package:flutter/cupertino.dart to package:cupertino_ui/cupertino_ui.dart. The Flutter team recommends first migrating your SDK to 3.44 or above on any channel, which gives you a frozen copy of both libraries that will not change under you even if you upgrade the SDK again later.
04 When do I need to have migrated?
The in-SDK libraries are deprecated at the next stable release after 3.44. Flutter ships four stable releases in 2026, in February, May, August and November, and 3.44 landed in May. That points at the August 2026 release for deprecation, with deletion some time later, so most teams have a quarter of runway.
05 Why did Flutter decouple these libraries?
To ship design updates without waiting for a quarterly SDK release. Previously a bug in a Material widget meant waiting for a full Flutter stable release to get the fix. Independent packages also shrink app size, let teams on older SDKs upgrade their design layer, and let Flutter react faster when iOS or Android change design.
06 What version should I pin?
Pinning material_ui: ^1.0.0 gets you Material updates as soon as they land on pub.dev, decoupled from your Dart SDK version. That is the intended benefit. Teams needing tighter control over UI changes should pin an exact version instead and upgrade deliberately, since UI can now change without an SDK upgrade.
07 What else changed in Flutter 3.44?
Swift Package Manager became the default for iOS and macOS builds. Flutter create no longer generates a Podfile, plugins resolved through pub get a Package.swift shim, and Xcode opens the project as a Swift package graph directly. For projects with custom CocoaPods configuration, this is a larger job than the Material import swap.
08 Will this break my third-party packages?
It can. Any package that re-exports Material has to migrate too. Well-maintained packages will have done so; unmaintained ones will not, and those are what turn a short migration into a long one. Audit your pubspec dependencies before committing to a migration date.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.