On this page · 8 sections
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
- Flutter's Material and Cupertino code freeze — Justin McCandless, Flutter team
- Flutter 3.44.0 release notes — Flutter documentation
- What's new in Flutter 3.44 — Flutter blog
- Flutter and Dart's 2026 roadmap — Flutter blog
- Move the material and cupertino packages outside of Flutter, issue 101479 — flutter/flutter on GitHub
- Flutter Roadmap — flutter/flutter on GitHub
- Flutter 3.44 Deep Dive: SwiftPM, Android, Web, and Tooling Changes — Sagnik Bhattacharya
- State of Flutter 2026 — Dev Newsletter
_Last updated: July 15, 2026._