What's In Store in Flutter 3.35


Introduction
Flutter keeps evolving, and this latest release is all about helping you build faster, smarter, and with more polish than ever before. With over 1100 commits from 168 contributors (including 39 first-timers!), Flutter 3.35 is another huge step forward for the framework and the community behind it.
This update is packed with features that make your day-to-day development smoother — from stateful hot reload on the web now being stable by default, to the experimental launch of Widget Previews, giving you a whole new way to design, test, and iterate on your widgets. On top of that, the team has shipped important accessibility upgrades, refined core widgets, boosted engine performance, and expanded IDE support to bring a more seamless experience across platforms.
In short, Flutter 3.35 is built to supercharge your productivity while raising the bar on quality and accessibility. Whether you’re coding your first app or scaling a product across platforms, this release has something for you. Let’s dive in and see what’s new!
Web
⚡ Hot Reload on the Web — Now Default!
One of Flutter’s most-loved features has officially leveled up: stateful hot reload is now stable and enabled by default on the web. No more flags, no extra steps — just build, save, and watch your changes come to life instantly in the browser.
This milestone was made possible thanks to the incredible feedback from the community during the experimental phase. The Dart and Flutter web teams took that input, ironed out performance issues, and expanded the range of code changes that can be hot reloaded successfully.
The vision? A seamless hot reload experience across every platform, so whether you’re building for mobile, desktop, or web, you enjoy the same snappy workflow. While you can still turn it off with --no-web-experimental-hot-reload
, the plan is to eventually make it a permanent default.
🧪 Wasm Dry Runs
Another big step forward is preparation for WebAssembly (Wasm) as Flutter’s default web build target. Starting in 3.35, every JavaScript build now includes a “dry run” compilation to Wasm.
What does that mean? Flutter checks if your app is Wasm-ready and reports any warnings straight to the console. Think of it as a friendly heads-up before the full switch happens. You can control this behavior with the --wasm-dry-run
or --no-wasm-dry-run
flags.
🎉 So What Changed?
Before: You had to manually enable web hot reload with the experimental flag.
Now: Just run your app in dev mode (from the command line, IDE, or coding agent) and hot reload is ready out of the box.
The --web-experimental-hot-reload
flag is now history — feel free to remove it from your configs.
By the way since every developer’s environment is unique, you can temporarily disable it using --no-web-experimental-hot-reload
, if hot reload causes hiccups in your setup.
Desktop
🪟 Multi-Window Support Takes Shape
Good news to those developers building desktop experiences with Flutter like myself and 99 others: multi-window support is officially on the horizon thanks to Canonical! 🎉
This release includes the foundational engine logic needed to create and update multiple windows on Windows and macOS.
What does this mean for you? It’s the first big step toward letting your Flutter apps open more than one window at a time — think productivity tools, editors, or any app where extra screens boost the user experience.
And this is just the beginning:
Future updates will extend support to Linux, completing the desktop trifecta.
Experimental APIs are coming soon, so you can start playing around with multi-window functionality directly from your app code.
Android
Sensitive Content Protection
Flutter on Android now supports protecting sensitive user content during media projection. With API 35+, you can use the new SensitiveContent
widget to automatically obscure your app’s screen during screen shares — helping safeguard private data from exposure or theft.
See the Protect sensitive content guide for setup instructions.
iOS
iOS 26 + Xcode 26 Beta Compatibility
The Flutter team is actively preparing Flutter for iOS 26 and Xcode 26 beta. You can help accelerate this effort by testing your apps and plugins against the latest betas and filing any issues you encounter.
To follow our progress (including a running list of known issues), check out the dedicated GitHub project.
Engine Updates
Flutter 3.35 brings a series of performance and compatibility improvements across Impeller, iOS, Android, and desktop platforms.
🔧 General Engine
Optimization: Faster app startup thanks to initialization on a new thread.
iOS: Adoption of
UISceneDelegate
for better integration with iOS app lifecycles.Tooling: Additional improvements to support debugging and profiling.
🎨 Impeller
Optimization: MSAA has been removed from intermediate targets for efficiency.
Fidelity: Lossy texture has been disabled compression by default.
Fix: Resolved a stuck
MaskFilter
bug in certain draw calls.Optimization: Path rendering performance has been improved.
New: Support for Vivante GPUs has been added.
Optimization:
DrawImageNine
now uses faster Porter-Duff blends.Fix: Patched memory leak in VideoPlayer.
Fidelity: Enhanced blur radius calculation for smoother large-sigma blurs.
🍏 iOS
Fix: Crash resolved in
WebView
when wrapped withClipRSuperellipse
.Fix: Image decoding now works when apps launch from background notifications.
Revival: Live Text (OCR) support returns to text fields.
🤖 Android
Migration: Default template upgraded to Android 24.
Fix: Crash fix for Android ≤ 14 caused by background image readers.
Fix: Corrected uniform array handling in OpenGLES Impeller shaders.
Fix: Upside-down fragment shader passes in OpenGLES Impeller.
Fix: Crash fix in
FlutterEngineGroup
.
💻 macOS
- Fix: Corrected Display P3 color rendering for higher visual fidelity.
DevTools and IDEs
Dart & Flutter MCP Server graduates to stable 🎉
The Flutter team just announced that the Dart and Flutter MCP Server is now available in the stable channel of the Dart SDK! 🎊 This is a huge step forward in the vision of building a highly productive, AI-assisted development experience for every Dart as well as a Flutter developer.
AI with context — not just autocomplete
The Dart and Flutter MCP Server acts as a bridge between your project and AI coding assistants, giving them far richer context than ever before. Instead of just suggesting snippets, your AI assistant can now understand your project structure, dependencies, and widget tree — and even take meaningful actions on your behalf.
With the MCP Server, you can ask your AI assistant to:
🛠️ Fix runtime errors: Inspect the live widget tree, spot a
RenderFlex
overflow, and apply the right fix automatically.📦 Manage dependencies: Find the best package on pub.dev, add it to
pubspec.yaml
, and runpub get
— all in one step.✍️ Write and correct code: Generate boilerplate for a new feature, then self-correct any analysis errors it introduces.
Works with your favorite AI tools 🤝
You can connect the MCP Server to tools like Gemini Code Assist, Firebase Studio, Gemini CLI, GitHub Copilot, and Cursor — unlocking a new level of productivity with the editor you already love.
👉 To dive deeper, you can check out the guide here: Supercharge Your Dart & Flutter Development Experience with the Dart and Flutter MCP Server.
DevTools keeps getting better 🛠️
The Flutter team has continued polishing DevTools with UX improvements, performance boosts, and bug fixes across versions 2.46.0, 2.47.0, and 2.48.0. Full details are in the release notes.
Widget Previews
One of the most requested features from the community is finally here — Widget Previews (experimental) are now available in stable!
Hot reload is still a developer’s best friend when iterating quickly, but Widget Previews take it a step further:
🖼️ Preview widgets in isolation, separate from a full app.
🎨 Test components across different screen sizes, themes, and text scales — side by side.
⚡ Perfect for building out design systems or verifying complex UI variations quickly.
This is an early experimental release, and your feedback will directly shape its future. The Flutter team is already planning:
✨ Tighter IDE integration — embed previews directly inside VS Code, Android Studio, and IntelliJ.
🎨 Generic theming support — as the team decouples Material and Cupertino libraries, Widget Previews will adapt to any design system.
👉 Try it now: Getting Started with Flutter Widget Previewer (Experimental)
Faster analysis with AOT snapshot ⚡
The dart
command-line tool now uses the AOT-compiled analysis server snapshot for commands like dart analyze
, dart fix
, and dart language-server
.
What this means for you:
✅ No functional change — but a big performance win.
📈 In tests, short commands finish in a fraction of the time.
⏩ Long-running tasks like project analysis are nearly 50% faster.
This makes everyday workflows — including CI test runs — feel much snappier.
Flutter plugin for JetBrains IDEs expands 🌍
With the release of Flutter IntelliJ Plugin M87, you now get:
✅ Support for Android Studio Meerkat and Narwhal
✅ Installation on CLion, GoLand, PyCharm, and more JetBrains IDEs 🎉
👉 To update: Settings > Plugins > Flutter > Update
Framework
🌍 A More Inclusive and Accessible Flutter
Accessibility isn’t an afterthought in Flutter — it’s a core principle. With every release, the Flutter team is making sure Flutter apps feel welcoming, usable, and delightful for everyone. Flutter 3.35 brings a big set of accessibility upgrades, new tools for developers, and refinements across platforms and core widgets. Let’s dive in.
Richer Semantics on the Web
Flutter web apps now communicate more effectively with screen readers and assistive tools. For international users, we’ve added support for semantics locales, ensuring accessibility features respect the user’s preferred language.
New Tools for Accessible Widgets
Developers now have more control when building accessible experiences:
SemanticsLabelBuilder
: Combine multiple data points into a single, coherent announcement for screen readers without messy string concatenation.SliverEnsureSemantics
: Wrap slivers so they’re always represented in the semantics tree — even when scrolled out of view. Perfect for complex scrollable views.
Core Widget & Platform Polish
Accessibility fixes and improvements across iOS, Android, and Flutter’s core widgets:
iOS:
CupertinoSliverNavigationBar
now respects accessible text scaling.VoiceOver tab activation behaves correctly.
Android:
- TalkBack now works with platform views, fixing a key issue for apps embedding native components.
Framework-wide:
CustomPainter
semantics properties are now backfilled, making custom-drawn UI fully accessible.The text selection toolbar is properly aligned in right-to-left (RTL) languages, improving global support.
🎨 Material & Cupertino now have More Power and More Polish
The design libraries also got a major round of improvements — from brand new components to smoother, higher-fidelity interactions. These upgrades don’t just make your apps look and feel better; they also simplify your workflow.
In fact, many community packages that developers previously relied on to fill gaps in the design system are now redundant, as the core Flutter libraries provide these capabilities out of the box. Less dependency management, more time to focus on building your app.
New & Enhanced Components
DropdownMenuFormField
: Easily integrate Material 3 dropdown menus into forms.Scrollable NavigationRail: Perfect for apps with many destinations.
NavigationDrawer header & footer: Adds layout flexibility.
CupertinoExpansionTile
: Expandable and collapsible list items with Cupertino styling.
Higher Fidelity & Interactivity
Cupertino widgets now use the RSuperellipse shape for the signature iOS continuous-corner look.
Added haptic feedback to
CupertinoPicker
andCupertinoSlider
.Sliders can now be configured to always show the value indicator.
⚙️ More from the Framework
More Powerful Slivers
- Developers can now control the paint order (z-order) of slivers, unlocking advanced effects like overlapping sticky headers.
Navigation & Forms
Fullscreen dialogs: The
fullscreenDialog
property is now supported inModalRoute
andshowDialog
.Form reset callbacks:
FormField
now includesonReset
, making form clearing logic easier.
Text Input & Selection Refinements
Unified gesture system:
PositionedGestureDetails
standardizes gesture details, making pointer-based gesture handling more generic.iOS: Single-line text fields are no longer scrollable, aligning with native behavior.
Android: Added support for Home and End keys.
🔮 Looking Ahead: Decoupling Design Libraries
As Flutter grows, the Material and Cupertino libraries are moving toward becoming standalone packages. This means:
Faster innovation: Updates won’t be tied to Flutter’s quarterly release cycle.
Community-driven contributions: More flexibility for the community to shape the design libraries.
Stronger core: The Flutter framework itself becomes leaner, more stable, and more focused.
For now, nothing changes in your workflow. This is the start of a long-term project, done in the open with community input.
To read the detailed vision and rationale, see: Decoupling Design in Flutter.
To provide feedback and help coordinate the work, please join the discussion on GitHub.
In the next article I will address the Breaking changes and deprecations.
Subscribe to my newsletter
Read articles from Siro Daves directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Siro Daves
Siro Daves
Software engineer and a Technical Writer, Best at Flutter mobile app development, full stack development with Mern. Other areas are like Android, Kotlin, .Net and Qt