What's In Store in Flutter 3.35

Siro DavesSiro Daves
10 min read

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 with ClipRSuperellipse.

  • 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 run pub 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.

  1. 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.

  2. 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.

  3. 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.

  1. 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.

  1. Higher Fidelity & Interactivity

    • Cupertino widgets now use the RSuperellipse shape for the signature iOS continuous-corner look.

    • Added haptic feedback to CupertinoPicker and CupertinoSlider.

    • Sliders can now be configured to always show the value indicator.

⚙️ More from the Framework

  1. More Powerful Slivers

    • Developers can now control the paint order (z-order) of slivers, unlocking advanced effects like overlapping sticky headers.
  2. Navigation & Forms

    • Fullscreen dialogs: The fullscreenDialog property is now supported in ModalRoute and showDialog.

    • Form reset callbacks: FormField now includes onReset, making form clearing logic easier.

  3. 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.


In the next article I will address the Breaking changes and deprecations.

0
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