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

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

reddit.com
u/RandalSchwartz — 2 days ago
▲ 53 r/oregon

Oregon, why are you missing from this list?!?

From https://arstechnica.com/health/2026/08/us-vaccination-rates-fall-again-as-exemptions-continue-to-rise-cdc-data-shows/

>Nationally, only 92.4 percent of kindergartners were vaccinated with the measles, mumps, and rubella (MMR) vaccine in the 2025–2026 school year, down from 92.5 percent last year. Coverage with the DTaP vaccine, which covers diphtheria, tetanus, and acellular pertussis (whooping cough), similarly fell from 92.1 percent to 92.0 percent.

>More than half of states saw decreases in coverage for MMR, DTaP, polio vaccine, and varicella/chickenpox vaccine. Only 10 states have MMR vaccination rates at or above the 95 percent threshold: West Virginia, Connecticut, Maine, New York, Mississippi, Rhode Island, Maryland, Massachusetts, California, and New Mexico.\

Oregon! Why are you missing from this list!??!

u/RandalSchwartz — 2 days ago

🎉 BlocSignal 1.0.0 is Live on pub.dev! 🚀

We are thrilled to announce that BlocSignal 1.0.0 is officially published and ready for enterprise production! ⚡

BlocSignal bridges the architectural discipline of BLoC with the fine-grained speed and synchronous reactivity of Signals v7.

✨ Why BlocSignal?

⚡ Synchronous Propagation: State updates propagate instantly on .emit() with 0ms microtask lag.

🛡️ BLoC Rigor: Full event-driven state machines (on<E>), streamless concurrency transformers (droppable, sequential, restartable), and transition audit logging.

💾 Synchronous Hydration: Zero-flicker state persistence across app restarts.

🔭 Enterprise Telemetry: OpenTelemetry tracing (bloc_signals_otel) & DevTools extension (bloc_signals_devtools).

🌐 Universal: Runs across Flutter, Jaspr SSR Web, Riverpod, and pure Dart CLI/backends.

📦 The 1.0.0 Monorepo Ecosystem

bloc_signals — Pure Dart core primitives (CubitSignal, BlocSignal)

bloc_signals_flutter — Flutter UI bindings, providers, builders & selectors

bloc_signals_test — Declarative testing utilities (blocSignalTest)

bloc_signals_lint — Custom analyzer lints & IDE quick-fixes

bloc_signals_hydrate — Local state persistence & hydration

bloc_signals_riverpod — Bidirectional Riverpod 2/3 adapters

bloc_signals_replay — Undo/redo state history tracking

bloc_signals_jaspr — Jaspr web component reactivity

bloc_signals_otel — OpenTelemetry distributed tracing

bloc_signals_devtools — DevTools extension for timeline & state diffing

🎬 Watch the 1.0 Launch Demo

Check out the live launch presentation walking through building from Cubits & Blocs to hooks, DI, and hydration: 📺 Watch on YouTube: https://www.youtube.com/watch?v=fwmlVOjsdgQ

🌐 Get Started

📖 Website: https://blocsignal.dev

📦 Pub.dev: https://pub.dev/packages/bloc\_signals

💻 GitHub: https://github.com/RandalSchwartz/BlocSignal

u/RandalSchwartz — 14 days ago

Is it just me, or am I able to actually "taste the air".

It seems not too unlike a smoky meat flavor, but without the wonderful flavor of meat behind it.

I think the last time I was like this was back in what 87 when we had all the wildfires that blew smoke to the portland metro area?

reddit.com
u/RandalSchwartz — 16 days ago

Play Minesweeper on the New BlocSignal Website!

To celebrate the launch of BlocSignal and our new website at https://blocsignal.dev, we built an interactive, playable Minesweeper case study app running live on the web!

⚡ What makes it cool under the hood (BlocSignal + Jaspr):

• 0ms Synchronous Flood Fill: Zero microtask queue latency when uncovering blank areas. • 100% Shared Business Logic: The exact same MinesweeperCubit runs in Flutter mobile/desktop apps AND Jaspr web apps with 0 code changes. • Zero-Backend State Hydration: Active game state restores synchronously across tab refreshes. • Shareable Challenge Seeds: Export & import Base64 seeds to challenge friends on identical minefield layouts! • Live GA4 Game Telemetry: Custom event tracking dispatched directly from Cubit state transitions.

👉 Come for the game, stay for the info! 🎮 Play now: https://blocsignal.dev/minesweeper ⭐️ GitHub: https://github.com/RandalSchwartz/BlocSignal

reddit.com
u/RandalSchwartz — 17 days ago

BlocSignal ecosystem expands

Dart, Flutter, interop (Bloc, Riverpod, Provider, Streams, Signals), hydration, devtools, lint, test harness, telemetry. Fully backed by skills. soon: mason, vscode extension. And we have amazing benchmarks! The rigor of Bloc with the flex and speed of Signal!

https://pub.dev/packages/bloc_signals

Where possible, the classic Bloc ecosystem (Felix and friends) has been the baseline for all packages. Signals as the carrier (rather than streams) has allowed for much more flexibility though. Sync rather than Async. Default emit is automatically de-duped (but you can override to get Bloc's default back). Full parity of consumer classes, including all methods. Interop would allow you to bridge BlocSignal, Bloc, Provider, and Riverpod in the same app, with performant pub/sub. Works in both Dart and Flutter envs.

1.0 release very soon! And appearing on Observable<Flutter> on August 6.

u/RandalSchwartz — 28 days ago

Supercharge your AI Coding Assistant with the new bloc_signals AI Skill! 🚀

I've just published a consumable AI Coding Skill alongside the latest releases of bloc_signals (0.1.10), bloc_signals_flutter (0.1.6), and otel_bloc_signals (0.1.4).

If you are using AI code assistants (like Gemini, Claude Code, or Cursor) to pair-program, you can install this skill directly into your workspace to instantly guide your assistant on best practices, APIs, and architecture rules.

👉 Consumable Skill DirectoryBlocSignal Skills Folder

⚙️ How to Install

Run this simple command in your project root to download and register the skill context for your local agent:

npx ctx7@latest skills install RandalSchwartz/BlocSignal bloc-signals

📚 What's Covered:

  • 🔄 BLoC to BlocSignal Migration: A step-by-step walkthrough detailing how to transition from classic stream-based BLoC to synchronous signals.
  • 🛡️ Sealed Class Exhaustiveness: How to override onEvent using Dart 3 switch statements and switch expressions to guarantee compile-time safety.
  • ⚡ Computed & Effect Lifecycle Rules: Best practices for declaring reactive primitives. You'll definitely want to see how easy it is to add computed() and effect() properties for both producers (internal constructors) and consumers (external stateful widgets/Flutter Hooks) without leaking memory.
  • 🔄 Stateful & Hooks Integration: Leveraging standard Stateful Widget lifecycles or eliminating boilerplate entirely using flutter_hooks and signals_hooks.
  • 📊 OpenTelemetry Observability: Instrumenting dynamic zones, transition logging, and span correlation.
  • 🧪 Synchronous Testing: Writing fast, synchronous unit tests without needing async microtask pump/waiting code.
reddit.com
u/RandalSchwartz — 1 month ago
▲ 5 r/perl

The AI Revolution is Validating 40 Years of Perl Philosophy

The tech world is experiencing an identity crisis. Pundits are shouting from the digital rooftops that traditional coding is over, replaced by natural human language interfaces. They're calling it a radical new paradigm.

But if you’ve been paying attention to Perl since 1987, you know this isn’t a revolution—it’s a homecoming.

When Larry Wall created Perl, he didn’t just build a language to sit closer to the metal; he built it to sit closer to speech. While computer science worshiped at the altar of rigid mathematical purism, Perl introduced a context-aware structure built on nouns, verbs, singulars, and plurals.

Today, Large Language Models operate entirely on probability, semantics, and context. We've spent decades forcing humans to think like transistors; now, we've successfully forced silicon to learn human.

Perl programmers are uniquely wired for this future. We’ve spent forty years treating programming as an exercise in linguistics and context.

The community isn't fading into the past; it’s providing the blueprint for what's next. Case in point: The Public Enrichment and Robotics Laboratories (RoboPerl) are currently engineering PerlGPT—a model trained specifically to understand best practices, architectures, and the nuanced wisdom of "Perl poets."

The future of engineering belongs to those who can speak fluent intent.

👉 Watch Randal's full talk on how structural context is dominating the modern landscape

#SoftwareEngineering #ArtificialIntelligence #Perl #ProgrammingLanguages #LLM #TechHistory

youtu.be
u/RandalSchwartz — 2 months ago

#HumpdayQandA with Image Providers in 45 minutes at 5pm BST / 6pm CEST / 9am PDT today! Answering your #Flutter and #Dart questions with Simon, Randal and John

youtube.com
u/RandalSchwartz — 2 months ago
▲ 17 r/dartlang+1 crossposts

fix_globals 1.2.3 released: Now fully migrated to the new dart install toolchain with smart update checks!

Hey everyone!

With flutter pub global and dart pub global being deprecated and phased out in newer Dart SDKs in favor of dart install, dart installed, and dart uninstall, I have completely rewritten fix_globals (v1.2.3) to support the new toolchain!

fix_globals is a lightweight CLI utility that helps you cleanly reinstall and refresh all globally installed Dart/Flutter CLI tools from their original sources (pub.dev, local paths, git repos, custom hosted registries). It's perfect for when a Dart SDK upgrade breaks global links, when switching Dart version managers (like Puro), or when you just want to refresh your global binaries.

What's New in v1.2.3: Toolchain Migration: Completely transitioned package management backend to the new dart install, dart installed, and dart uninstall commands. Smart Configuration Scanner: Resolves platform-specific paths (macOS, Linux, Windows) to scan the local app-bundles directory and parse pubspec.lock files to reconstruct original install descriptors (including git branches/refs, sub-paths, and custom registries). Smart Update Checks: In --update (-u) mode, it now queries the pub.dev / custom registry APIs first. If a package is already up to date, it skips recompilation entirely, making nightly cron jobs blazingly fast! SDK Option Removed: Cleaned up the deprecated --sdk switch as all global tools now run on the standardized dart executable. How to Migrate: Because the backend has transitioned, your old legacy pub global precompiled binary of fix-globals must be replaced once manually:

dart install fix_globals

Check out the code, open issues, or contribute on GitHub: 👉 https://github.com/RandalSchwartz/fix_globals

u/RandalSchwartz — 1 month ago

#HumpdayQandA and Live Coding! in under an hour at 5pm BST / 6pm CEST / 9am PDT today! Answering your #Flutter and #Dart questions with Simon and Randal

youtube.com
u/RandalSchwartz — 2 months ago

Unfortunate wording on construction signs

Along N Willamette, for the construction they have orange diamond signs with:

BIKES MERGE WITH CARS

And my reaction is "I hope not!" thinking it's some sort of brundle-fly experiment. Anyone else have "literal" chuckles from over-interpretation?

reddit.com
u/RandalSchwartz — 2 months ago

:red_circle: #HumpdayQandA and Live Coding! at 5pm BST / 6pm CEST / 9am PDT Wednesday! Answering your #Flutter and #Dart questions with Randal, John, and Kali

youtube.com
u/RandalSchwartz — 2 months ago

Need Google Earth B-roll? Check out http://earth.google.com/studio/

I haven't done more than watch a few videos and played with it a bit, but the availability of having Google Earth carefully scripted for B-roll looks pretty fun.

reddit.com
u/RandalSchwartz — 2 months ago

#HumpdayQandA and Live Coding! in 30 minutes at 5pm BST / 6pm CEST / 9am PDT today! Answering your #Flutter and #Dart questions with Simon, Randal, Danielle and Matt

youtube.com
u/RandalSchwartz — 2 months ago

Stop Using Uri.parse() Like This in Dart &amp; Flutter!

Ever wondered why your Flutter app randomly throws a 400 error when a user searches for something with an ampersand (&) or a pound sign (#)? Using string interpolation inside Uri.parse() is a silent trap for URI injection and broken character encoding. In this quick video, we look under the hood at exactly why Uri.parse() fails on dynamic strings, how it splits your query parameters, and how to fix it permanently using the structured Uri constructor and Uri.replace().

youtu.be
u/RandalSchwartz — 3 months ago

#HumpdayQandA Google I/O Special in 20 minutes at 5pm BST / 6pm CEST / 9am PDT today! Answering your #Flutter and #Dart questions with Simon, Randal, and Matthew

youtube.com
u/RandalSchwartz — 3 months ago