Harsh Mittal
Back to blog
2025-09-03·4 min read

Flutter 3.35: August 2025's Update That Redefines Cross-Platform Development

FlutterReleasesAlso on Medium

Flutter 3.35: August 2025's Update That Redefines Cross-Platform Development

Flutter Web stops feeling like an afterthought in 3.35 — stateful hot reload is on by default, so form state and scroll position survive a reload instead of resetting, and it's fast enough to matter on real production dashboards, not just demo apps. Widget Previews hitting stable is the other headline: side-by-side light/dark comparisons and multi-size previews without running the full app is the component-driven workflow Flutter's been missing compared to something like Storybook. On the tooling side, a stable Dart & Flutter MCP server gives AI coding assistants actual structured context — detecting RenderFlex overflow issues, managing pubspec.yaml dependencies, correcting analyzer warnings — instead of generic code-completion noise.

The less flashy but very real wins are performance and modularity: an AOT-compiled analysis server makes dart analyze roughly 50% faster, Impeller starts faster and fixes some VideoPlayer memory leaks, and Material/Cupertino are being split into standalone packages so they can update independently of Flutter's own release cycle. The catch is migration isn't free — expect a day or two for breaking changes like the Radio → RadioGroup model and form widgets no longer working directly as slivers.

Stateful Hot Reload on Web: Why It Matters More Than It Sounds

Losing form state and scroll position on every hot reload during web development sounds like a minor annoyance until it's measured against the actual iteration cost — a developer working on a multi-step form or a long scrollable dashboard has to manually re-navigate to the exact state they were testing after every single code change. Stateful hot reload surviving a reload removes that entire class of wasted re-navigation, which compounds into a genuinely faster iteration loop across a full day of web development, not just a nice-to-have.

Widget Previews: Stable and Ready for Daily Use

Going from experimental (introduced in 3.35's own preview work) to stable means the Previewer's API surface is now something worth building into a regular workflow rather than checking on periodically. Side-by-side light/dark theme comparisons and multi-size previews, without spinning up the full app and navigating to the specific screen, is the component-isolation workflow that frameworks like Storybook made standard in web development — Flutter's version of it maturing to stable is a meaningful workflow upgrade for anyone doing component-level UI iteration.

The MCP Server: Structured Context, Not Generic Autocomplete

The distinction that matters here is structured versus generic. A generic AI code assistant pattern-matches against similar-looking code it's seen before and produces a plausible-looking fix for something like a RenderFlex overflow — plausible, but not necessarily correct for this specific layout's actual constraint chain. A stable Dart & Flutter MCP server gives the assistant access to real, structured project context: the actual widget tree, the actual constraint violation, the actual pubspec.yaml dependency graph. The practical difference shows up exactly in these debugging scenarios — a fix informed by the real constraint tree versus one that's a generically reasonable guess.

Performance: The AOT Analysis Server

dart analyze running roughly 50% faster because the analysis server itself is now AOT-compiled is the kind of change that doesn't make headlines but adds up meaningfully across a team — a faster analyzer means faster IDE feedback on every keystroke, faster CI lint checks, and less time spent waiting during the exact moments developers are most likely to context-switch and lose focus.

Impeller starting faster and fixing some VideoPlayer-related memory leaks addresses two separate but related pain points: cold-start time on apps using Impeller, and long-session memory growth specifically in apps that use video playback heavily — both real, measurable improvements rather than marketing-only performance claims.

Modularity: Material and Cupertino as Standalone Packages

Splitting Material and Cupertino into standalone packages decouples their release cadence from Flutter's own SDK release cycle — a fix or new widget for Material can ship independently rather than waiting for the next full Flutter release. This is primarily a long-term maintainability win for the Flutter team itself, but it also means design-system-specific fixes can reach developers faster than they could when bundled into Flutter's broader release train.

Migration Reality: Budget a Day or Two

The breaking changes are real and worth planning for rather than discovering mid-sprint. The Radio widget's model changing to require a RadioGroup ancestor means any screen using standalone Radio widgets needs updating to the new grouped structure. Form widgets no longer working directly as slivers means any screen combining form fields with CustomScrollView/sliver-based layouts needs restructuring — typically wrapping the form content in a SliverToBoxAdapter or equivalent rather than expecting form widgets to behave as slivers natively.

Neither change is difficult individually, but budgeting a day or two for the migration — rather than assuming it's a drop-in version bump — avoids the upgrade turning into an unplanned mid-sprint disruption when a screen that compiled fine yesterday suddenly doesn't after the SDK bump.

Should You Upgrade to Flutter 3.35?

The web and tooling improvements alone are worth the upgrade for any team doing active Flutter Web development or using AI-assisted coding tools day to day. The performance and modularity wins benefit every team passively. The migration cost is real but bounded and predictable — checking for Radio and sliver-form usage before upgrading turns "surprise breaking change" into "known, budgeted work."

Get new posts by email

No spam, no schedule — just an email when a new post goes up.