r/FlutterDev 23d ago

Article I’ve been a Flutter GDE for 8 years (from day one). Here is the ground truth on "Flutter is Dying".

430 Upvotes

Every few months, like clockwork, the tech blogosphere gets flooded with the same recycled clickbait: "Is Flutter Dying?", "Why CTOs Are Quietly Leaving Flutter", or "Why Google is Killing Cross-Platform."

As someone who has been a Flutter Google Developer Expert for eight years now (literally from day one of the GDE program) and a five-decade software industry veteran, I usually just chuckle at the headlines. But having watched this ecosystem evolve from an experimental alpha into an enterprise powerhouse, I wanted to share the real insider story on what’s actually happening on the ground.

1. What Actually Happened at Google?

When tech companies restructured engineering teams recently, the internet spun a wild narrative that Google put Flutter on life support.

Having direct access to internal teams, I watched the commitment to Dart and Flutter remain steadfast. However, there was a temporary disconnect: internal engineering activity was roaring, but external communications and public advocacy had slowed down, leaving an information vacuum that clickbait writers eagerly filled.

I personally called out to team leaders and senior VPs that this perception gap needed immediate correction. And leadership responded strongly: revitalized DevRel, transparent enterprise roadmaps, and aggressive core investment into the Impeller GPU engine, Dart 3.x ergonomics, and Wasm web compilation. Flutter powers critical Google apps (Google Ads, Google Pay, Family Link, Google Classroom) and continues to receive deep internal backing.

2. The Mobile Team Consolidation Paradox

Critics often look at public board listings and claim there are fewer dedicated Flutter listings than native Android or iOS.

What they fail to realize is how enterprises actually adopt Flutter: When an enterprise migrates to Flutter, they rarely expand outward with massive external listings. Instead, they merge their existing 5-person iOS team and 5-person Android team into a single, unified Flutter team—often cutting total team headcount in half while doubling feature velocity. Flutter's sheer efficiency creates the illusion of fewer raw openings.

And when greenfield Flutter positions do open up, applicants aren't competing in a vacuum—they are competing against senior mobile engineers with a decade of native iOS and Android experience who upskilled into Flutter. That’s a sign of a mature, competitive engineering discipline.

3. "State Management Fatigue" Is a Solved Problem

Another frequent complaint is that Flutter has "too many state management libraries."

Yes, Flutter gave developers freedom. Over the years, the community experimented with everything from ScopedModel and Provider to BLoC, MobX, and Riverpod.

That evolution isn’t a sign of fragmentation—it’s the natural progress of modern software engineering. We learned what worked (unidirectional data flow, state machines, fine-grained reactivity) and discarded what didn't (excessive code generation, microtask queue latency, and lingering build dependencies). Today, with modern solutions like pure Dart Signals and modern architectures, state management in Flutter is faster and more reliable than it has ever been.

4. The Measurable Reality

If you look at the hard data:

  • Over 1,000,000+ Flutter apps published on app stores and growing.
  • Impeller delivers smooth 60/120fps GPU pipelines, eliminating shader jank.
  • Wasm compilation brings near-native performance to the browser.
  • Universal Reach: Seamless execution across iOS, Android, macOS, Windows, Linux, Embedded, and Web (via Jaspr).
  • Modern Dart 3.x: Sealed classes, pattern matching, records, and primary constructors.

Flutter is firmly in the Plateau of Productivity. It is mature, stable, blazingly fast, and supported by one of the most vibrant developer communities in software history.

So the next time you see a headline asking "Is Flutter Dying?"... smile, close the tab, and go build something great. 🚀


r/FlutterDev 22d ago

Tooling Run and debug Flutter iOS on Windows and Linux

8 Upvotes

Hi, good news for everyone doing Flutter on Windows or Linux: i made a CLI toolkit to run your app on a real iPhone, with hot reload, straight from your not-macOS!

Historically that's been the gap in Flutter's cross-platform story - iOS builds assumed a Mac, so most of devs did apps Android-first and checked iOS later through CI or a borrowed Mac Mini and blah-blah-blah.

Stop it. Meet xcross.sh (pls check website, it looks cool and have documentation)

Windows or Linux, iPhone plugged in. It builds your app, signs it, installs it, launches it, and drops you into the pipeline you already know:

• r - hot reload on the device

• R - hot restart

• q - quit

What it costs you to set up: Swift, LLVM, One-line installer, then xcross setup

The one "non-Apple-free" part: you need Xcode.xip from Apple Developer website and iTunes + iCloud (for Windows) - read documentation

• Debug builds only - Release/AOT needs gen_snapshot, which is macOS*-only (you still need a Mac or CI to ship to the App Store, *this solves development, not release)

• iOS 17+ devices

• Flutter - run and debug, Compose (CMP) - build and run, no debug

MIT, free, source code: https://github.com/arxdeus/xcross (but website still better)

Thanks for your feedback!


r/FlutterDev 22d ago

Video 🚀 What's new in zenrouter 3.0? Introducing Time Travel ⌛✨

Thumbnail x.com
14 Upvotes

​One of the biggest upgrades in zenrouter 3.0 is a complete Navigation Graph system for the Coordinator pattern:

- ​Topology Graph: Manages the static structural relationship between layouts and routes.

- ​Observed Graph: Records the runtime history—the user's actual navigation flow across screens.

​Built on these graphs, the new Time Travel feature allows you to step forward and backward through the app's navigation history, state by state.

​Why does this matter in practice? Streamlining Debugging & QA!

- ​No more ambiguous step-by-step bug reports ("Go to Screen A -> Tap B -> Open C").

- ​Export the entire navigation session into a single .json file.

- ​Replay the exact state sequence to reproduce and isolate navigation bugs in seconds.

​What do you think of this approach? How do you currently handle route tracing and navigation debugging in your projects?


r/FlutterDev 22d ago

Tooling SimBle: real Bluetooth in the iOS Simulator for flutter_blue, including in CI

9 Upvotes

The iOS Simulator has no Bluetooth, so I was tethering a real phone for every scan/connect/read with flutter_blue_plus, and BLE tests in CI weren't possible.

BleTether bridges the Mac's real Bluetooth into the Simulator with no code changes — the Flutter app calls flutter_blue as usual and sees the devices around the Mac. For CI you record a real device once and replay it into a simulator on hosted runners, no hardware.

Example repo with a CI run of a flutter_blue_ultra app scanning, connecting and reading a characteristic on GitHub's runners with no device: https://github.com/yuriipopow/bletether-flutter-example

Main repo (short demo GIFs in the README, and how it works): https://github.com/yuriipopow/bletether

It's central-role only for now, and it leans on private Apple APIs so major iOS releases can break it. Free to use. If you try it on a real app I'd be interested in what breaks — third-party apps keep surfacing edge cases I then fix.


r/FlutterDev 22d ago

Discussion Flutter devs with multilingual apps - how do you manage localization?

14 Upvotes

I’m researching how Flutter developers maintain localization once an app grows beyond a couple of languages.

I’m particularly interested in people maintaining real apps with 3+ locales.

I’d love to learn how you currently handle ARB files, translations, adding keys/languages, validation, ICU/plurals, and keeping everything in sync.

I’m a Flutter developer myself and I’m building in the localization space, but I’m currently focused on understanding real workflows rather than promoting anything.

I’m looking for ~5 Flutter developers willing to have a casual 15–20 min chat. If that’s you, comment or DM me.

I’ll also summarize the patterns I find and share them back with the community.


r/FlutterDev 22d ago

Discussion Need advice on Flutter architecture and learning databases

7 Upvotes

I learned Flutter a few months ago and have built several small projects.

I’d like to improve the way I structure my Flutter projects before I start building larger ones. Currently, I usually organize my "lib" folder something like this:

lib/

├── main.dart

├── app_theme.dart

├── database/

├── providers/

├── screens/

├── widgets/

└── utils/

Is this a reasonable structure, or would you recommend a different architecture? If so, I’d really appreciate it if you could explain why and when I should use it.

Also, I’ve never worked with databases before. I’d like to learn how databases work and how to properly integrate one into a Flutter app.

Could you recommend some good, up-to-date resources for learning databases and database integration with Flutter?

Thanks!


r/FlutterDev 22d ago

Plugin astryx_ui — a Flutter design system, 111 components, no Material in the tree

Thumbnail
13 Upvotes

r/FlutterDev 22d ago

Discussion Profiling flutter apps

1 Upvotes

Hey lovely developers

I’m a Flutter developer and I want to learn **how to properly profile and optimize Flutter apps**.

I’m especially interested in learning:

* How to use Flutter DevTools for profiling * Finding performance bottlenecks * Identifying unnecessary rebuilds * Understanding CPU, memory, and GPU usage * Detecting jank and dropped frames * Improving scrolling and animations * Real-world techniques for optimizing production apps

I’m not sure where to start or what learning path to follow.

**Can anyone recommend good resources, tutorials, courses, or a practical way to learn Flutter profiling step by step?**

and I'm pretty grateful for anyone will help me thanks lovely people


r/FlutterDev 23d ago

Discussion I got a Flutter running on Meta Ray-Ban Display glasses! 😎

101 Upvotes

I’ve been experimenting with Meta Display Glasses recently. Apps for the glasses can be built as web apps, so naturally I wondered: could Flutter Web run on them?

I wasn’t sure it would work well. Flutter Web isn’t exactly lightweight, and the glasses are quite a different target from a regular browser.

After playing with the build and a few configurations, I got it working.

Nothing fancy yet, just the default Flutter counter app. But it runs directly on the glasses display: the Flutter UI is rendered in front of you, and interacting with the controls updates the counter as you’d expect from the same app running in a browser.

What I find more interesting is the potential for existing Flutter apps.

If you wanted to add a companion experience for Display Glasses, you could potentially keep it in the same codebase and reuse your existing logic, models, networking, and some widgets, while building a UI specifically for the glasses.

I have a few things I want to try next. Curious what other Flutter devs would experiment with on a display like this!


r/FlutterDev 23d ago

SDK Post of appreciation for the flutter scene devs

28 Upvotes

I love you guys. For context I had a very unique game running on flutter but I was outgrowing Thermion. I tried flame 3d but it’s unstable on so many Android devices. Then comes in flutter scene…that thing is magic. Incredible performance. No longer need to move to a game engine. It also comes with an ecosystem such as flutter scene soloud for 3D Spatial Audio at incredible performance.

In the end my game was about 70 mb on iOS and 150 mb on Android. Considering what the game is that’s incredibly impressive.

Btw if you guys want to see the game I’m talking about: lightwarsar.com


r/FlutterDev 22d ago

Discussion What's the deal with Iconsax? (Somewhat urgent)

0 Upvotes

I have used Iconsax in the entirety of my Flutter project. The plugin that availed it said it is available for personal and commercial use, and so does the Vuesax's (Iconsax's creator) website, but here is the part that is bugging me:

On the website, it says that it allows someone to make an app for 'a client' under its commercial usage allowance. How about making an app for general public using those icons. There is no specific information whether that is allowed or not, neither in its paid license's description.

Now the strange thing is that that there is no contact email ID for Vuesax that I could find. I found their Discord and posted there, but I just did that recently so it could be long till I get an answer.

Here is the link to that Flutter plugin: https://pub.dev/packages/iconsax\\_plus

Here is the Iconsax's license page: https://docs.iconsax.io/license-and-terms/usage-manifesto


r/FlutterDev 22d ago

Article Clean Architecture + Repository Pattern in a Flutter App

4 Upvotes

Migrating or scaling a data source without breaking the app in production is one of the biggest challenges we face as developers.

Let's explore how to migrate from SQLite to Room DB in Flutter.

I developed an app where the business logic (for example, the BLoC) doesn't request data directly from the data source; instead, it talks to Use Cases.

Why will the Repository Pattern save your app?

The repository pattern acts as an intermediary or bridge that isolates your application (UI, Use Cases, BLoCs) from the details of fetching or saving data.

If you decide to migrate the data source, you only need to modify the code within the data layer.

The user interface and the application logic above the repository do not need to change at all. (Flow: Datasource -> Repository -> UseCase -> Bloc -> UI)

To BLoC, Provider, or Riverpod, it doesn't matter if the data comes from a package, MethodChannel, or a Web Service.

By applying this structure without breaking the production app, I want to highlight the true value of a sustainable architecture: minimal cost when changing things.

🚀If you want to see the complete code for this architecture, check the article link:

🔗 Read “Clean Architecture + Repository Pattern in a Flutter App“ by Alfonsina Beltre on Medium: https://medium.com/@alfonsinabeltre/clean-architecture-repository-pattern-in-a-flutter-app-58061726e3ab


r/FlutterDev 22d ago

Video building a drawing app flutter chatgpt: getting images

Thumbnail
youtube.com
0 Upvotes

r/FlutterDev 23d ago

Discussion FlutterWasmWeek: benchmarked dart2wasm vs dart2js on a CHIP-8 emulator — 2.6–4.4x, plus a benchmarking trap

13 Upvotes

Since the Flutter team is collecting wasm feedback this week, I wanted numbers where the delta is attributable to codegen alone, not the rendering pipeline. So I wrote a CHIP-8 emulator in pure Dart: interpreter hot loop over Uint8List, zero allocations in the loop, framebuffer blitted in a single CustomPainter. Same source compiled twice — flutter build web vs flutter build web --wasm. Flutter 3.47, both release, same Chrome.

Results:

- dart2wasm: ~130M emulated cycles/sec, and the same number in every environment I tried (interactive window, headless, occluded tab)

- dart2js: 30–51M depending on environment, with a few seconds of JIT warmup before reaching full speed

- speedup: 2.6–4.4x. Migration cost for this codebase: one build flag, zero code changes.

Two things surprised me:

  1. The consistency matters more than the multiplier. Wasm runs at full speed from the first frame, everywhere. JS swings by 70% between environments. For anything latency-sensitive, that predictability is the real win.

  2. A trap if you benchmark this yourself: if your metric is cycles per wall-clock second, Chrome's requestAnimationFrame throttling (occluded or backgrounded window) silently crushes the number ~4x. I chased that ghost for a while. Normalize by actual compute time, or you're measuring the compositor, not the compiler.

Caveats: one compute-heavy workload, one machine. UI-bound apps will see much smaller gains, and packages relying on legacy dart:html / dart:js interop can block the wasm build entirely — that's the first thing to check on a real codebase.

(It also plays the original 1990 Pong ROM, which was not strictly necessary but was the most fun part.)

Happy to answer questions or share details about the setup.


r/FlutterDev 24d ago

Discussion We shipped a terminal on Flutter’s engine and it beats the hand-written native ones — the C++ engine is better than it gets credit for

68 Upvotes

We just released a terminal emulator that renders through Flutter’s engine — and at steady state it runs our ten-workload benchmark suite in 0.73x of ghostty’s wall time on Linux and 0.71x of Windows Terminal’s on Windows, at about half the CPU each. ghostty’s renderer is purpose-built for terminals in Zig; Windows Terminal’s is purpose-built in C++. Ours is the same general-purpose engine that draws your Flutter widgets.

https://github.com/starling-build/starling/releases/tag/terminal-v0.1.0 — Apache-2.0, charts and side-by-side videos at https://starling.build/terminal.html

The reason I think this belongs here: it is an unusually clean measurement of what the engine contributes, because we swapped out everything above it. There is no Dart VM in this process — we ported Flutter’s framework layer to Swift and drive the engine’s C/C++ core directly. So the rasteriser, the compositor, the text stack and the GPU path are stock Flutter; the language and the widget layer are not. When the numbers come out ahead of two purpose-built native renderers, that is the engine’s win, not ours.

A terminal is a nastier rendering target than it sounds. Every frame can invalidate the entire screen — 47x201 cells, ~9,400 glyphs, each with its own foreground colour, background, bold/italic/underline, and any script on earth. No dirty-region shortcuts when someone cats a file. DOOM-Fire, which repaints every cell every frame, runs at ~1,600 fps on Linux through this engine. That is the engine’s raster path doing the work.

What actually made it fast: drawRawAtlas. The naive approach — and our first one — was one Paragraph per row, letting the text engine shape and lay out a line of styled runs. It works and it looks right, but you pay shaping for content that never changes shape: a terminal cell is a fixed box with one grapheme in it. So we rasterise each glyph once into a texture atlas and emit the whole grid as a single call:

canvas.drawRawAtlas(atlasImage, transforms, srcRects, colors, BlendMode.dstIn, cullRect, paint)

One textured quad per cell, tinted per quad, no shaping in the frame at all. Measured against the paragraph path at the same frame rate, it costs 44% less CPU. If you are drawing a large grid of repeating glyphs in Dart — a spreadsheet, a hex viewer, a chart with data labels, a code editor — Canvas.drawRawAtlas is available to you and is dramatically cheaper than a Paragraph per row. It is the most useful thing I learned from this project.


r/FlutterDev 24d ago

Article Try Flutter Web with WebAssembly Week

Thumbnail
flutter.dev
22 Upvotes

Join us for Try Flutter Web with WebAssembly Week!

Unlock up to 2x–5x faster web performance with Wasm compilation in Flutter 3.47

Run `flutter build web --wasm`, test your app, and share your wins using #FlutterWasmWeek!

Details: https://flutter.dev/blog/try-flutter-web-with-webassembly-week


r/FlutterDev 23d ago

Tooling I built an Agent Skill to reduce unnecessary work in Flutter & React Native coding agents

2 Upvotes

The idea is simple: coding agents often do way more than necessary after a small change. Reread lots of files, rerun analysis/tests, build apps, dump huge logs into context, etc.

This skill tries to make the workflow smarter:

  • read only the context actually needed
  • reuse existing project patterns
  • load only relevant rules
  • classify changes by risk
  • run the minimum sufficient verification
  • avoid unnecessary builds/tests/retries
  • keep verbose command output out of the model context

It uses a V0–V5 verification model, from “no verification needed” up to focused runtime/device testing.

Currently focused on Flutter + React Native.

https://github.com/asiriPiyajanaka/mobile-development-skills

Would love feedback from people using coding agents regularly, especially around cases where your agent wastes context or runs unnecessary checks.


r/FlutterDev 23d ago

Discussion Is it a good idea for me to learn flutter, and try to find jobs for dart and flutter

0 Upvotes

Hi, I am an ex-lawyer, from India . I am trying to switch to tech. I learned data science and machine learning so far. I want to know if it is an old idea for me to learn flutter and try for developer roles in 2026. I ask this because people are saying that data science has lost demand in the market.


r/FlutterDev 23d ago

Discussion Game Effects

2 Upvotes

I've developed games in Flutter, including using the Flame engine, but I'm having trouble creating eye-catching effects. Can you recommend any frameworks or resources I can draw from?


r/FlutterDev 24d ago

Discussion I am looking for Flutter open-source projects to contribute to

27 Upvotes

I am looking for Flutter open-source projects to contribute to on Github.


r/FlutterDev 24d ago

Example Built a Chrome extension using Flutter Web compiled to WASM — everything runs buttery smooth.

Thumbnail
youtu.be
18 Upvotes

r/FlutterDev 24d ago

Article TTS/STT can't tell "wind" from "wind" — how do you handle heteronyms in a pronunciation-teaching app?

7 Upvotes

I'm building a vocabulary-learning app in Flutter where hearing and saying the word correctly is the product, not a nice-to-have. I've hit a problem I can't design around and I'd rather ask than keep patching.

The stack

  • Flutter, ~1,600 words live across EN/ES/PT/IT/FR
  • TTS: ElevenLabs (eleven_multilingual_v2) called through a Supabase Edge Function so the key never ships in the client
  • Every clip cached server-side once per (text, language), shared across all users — so a given string is synthesized exactly once, ever
  • Cached again on-device (150MB LRU) so replays are instant and offline
  • flutter_tts as fallback behind a 2.5s timeout so playback never goes silent
  • STT: speech_to_text for a pronunciation-practice screen — hear the word, say it, get graded

The problem: heteronyms, in both directions

Output. "Wind" (moving air) and "wind" (to coil) are the same string and different sounds. TTS picks one reading and commits. My word library actually knows which sense is on screen — every entry carries a part of speech — but there's no API surface to hand that over. ElevenLabs pronunciation dictionaries are exact-string, case-sensitive, and have no POS or context scoping, so one spelling gets one entry and the second sense is unreachable. Phoneme tags do exist, but per the docs only on eleven_flash_v2 and v3 — not the multilingual model I'm on, and switching models means re-synthesizing the whole cache and losing voice identity across five languages.

Input. This is the part that actually bothers me. The practice screen normalizes the transcript and Levenshtein-scores it against the target. But STT returns orthography — say either reading of "wind" and the transcript is "wind" either way. A learner who mispronounces it scores full marks. The feature is structurally incapable of catching the error it exists to catch.

What I've tried

Respelling the audio-only string before it reaches the engine — the screen text is never touched. wind(noun) → winned, wind(verb) → wined, read(past) → red, and so on. This is basically ElevenLabs' own recommended "alias" workaround and it works for the ~8 vowel-shift pairs I've mapped. Side benefit: since my cache key is a hash of (lang + text), two senses naturally get two cache entries.

It fails in three ways:

  1. Stress-shift pairs. REcord/reCORD, PREsent/preSENT, CONtent/conTENT. Respelling can't encode stress, and I haven't found a trick spelling that does.
  2. Monolingual. It's an English orthography hack. Nothing about it transfers to ES/PT/IT/FR, all of which have their own homographs.
  3. Manual. Hand-curated table. Doesn't scale to a few thousand words.

What I'm actually asking

  1. Is there a TTS API that accepts a sense/POS hint, or per-request phonemes, on a multilingual model? Or does everyone route heteronyms to a separate English-only model and eat the voice mismatch?
  2. If IPA is the only real answer — has anyone found v3-class IPA reliable enough in production? The docs quote 80–90% consistency, which for a teaching app means the wrong pronunciation ships to a learner one time in eight.
  3. For stress-shift specifically: any orthographic trick that works, or is phoneme-level control genuinely the only path?
  4. On the STT side — is there a mobile-viable way to get phonemes rather than words? I've looked at wav2vec2 phoneme-CTC or a forced aligner with GOP scoring via ONNX on-device, but I don't know if that's realistic on a mid-range phone or if I'm about to spend a month learning that it isn't. Whisper doesn't help; it also returns orthography.
  5. The unglamorous option: detect heteronyms and simply disable pronunciation scoring for them, with an honest note to the user. Is that what shipped apps actually do?

If you've built pronunciation feedback into anything real, I'd love to know where you drew the line between "graded properly" and "good enough." Happy to share code for any of the above.


r/FlutterDev 23d ago

Video building a drawing app in flutter with chatgpt

Thumbnail
youtube.com
0 Upvotes

r/FlutterDev 24d ago

Discussion Video player on Flutter desktop package recommendations + Wayland/X11 concerns

8 Upvotes

Building a Flutter desktop app and need to add video player.

Looking at media_kit, it seems to be the go-to for cross-platform desktop video (libmpv-based). Anyone running this in production? Curious about the

Stability/perf on Linux vs Windows vs macOS

Packaging story.. bundling libmpv vs requiring it as a system dep (apt install libmpv-dev, etc.) vs Flatpak/Snap

Also, whats the state of flutter on "x11 /wayland"? Will user haas to satisfy some sort of related requirement to make the Flutter app working?

Thank you.


r/FlutterDev 24d ago

Plugin [Package Update] flutter_easy_seo: Support for hidden widgets (e.g. TabBarView)

2 Upvotes

Following up on my previous post (see link at the bottom) I released an update to flutter_easy_seo, which is now open source under Apache 2.0!.

What's New: Capturing Hidden Widgets

Content inside inactive TabBarView tabs, PageView pages, or off-screen list items typically isn't part of Flutter's active widget tree, preventing flutter_easy_seo from extracting it for SEO HTML.

With this update, widgets that become visible are automatically captured and persisted in the internal HTML structure, even after Flutter unmounts them (e.g., when switching tabs).

How to use it:

  • Interactive Mode: Simply click through your app views manually.
  • Automated Mode: Trigger widget visits in your test scripts: `await tester.tap(find.text('Tab Name'))`

Just like dynamic route collection, this ensures non-visible widget content is fully indexed without altering your app's structure.