# Flutter Community - Medium

Articles and Stories from the Flutter Community - Medium

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## The Death of the Static UI: Building Context-Aware Mobile Apps in 2026

DevFeed: [The Death of the Static UI: Building Context-Aware Mobile Apps in 2026](<https://devfeed.tech/articles/the-death-of-the-static-ui-building-context-aware-mobile-apps-in-2026-23054.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/the-death-of-the-static-ui-building-context-aware-mobile-apps-in-2026-ddd06d25a473?source=rss----86fb29d7cc6a---4>)

Author: Rudraksh Shukla

Published: 2026-09-14T17:02:27Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [ui](<https://devfeed.tech/topics/ui.md>), [User experience (UX)](<https://devfeed.tech/topics/ux.md>), [personalization](<https://devfeed.tech/topics/personalization.md>), [Flutter](<https://devfeed.tech/topics/flutter.md>), [real-time](<https://devfeed.tech/topics/real-time.md>)

Tags: [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [dark-mode](<https://devfeed.tech/tags/dark-mode.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [machine-learning](<https://devfeed.tech/tags/machine-learning.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [personalization](<https://devfeed.tech/tags/personalization.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [recommendations](<https://devfeed.tech/tags/recommendations.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

This developer article argues that mobile interfaces are evolving from fixed layouts into context-aware surfaces that adapt navigation, touch targets, color, density, and surfaced actions using on-device signals. It discusses motion, location, time, usage history, and device or network state, with Flutter examples and references to patterns associated with Spotify and Netflix.

### Source excerpt

Every app you've ever shipped made the same quiet assumption: the interface is a fixed thing. You design a screen, you lay out the widgets, and every user sees the same arrangement in the same order -- a 22-year-old on a commuter train at 8am and a 60-year-old at home on a Sunday get pixel-identical layouts. For thirty years that was simply what a UI was. That assumption is dying. In 2026 the leading mobile apps treat the interface as a live surface that reshapes itself in real time -- reordering navigation, resizing touch targets, shifting color and density, surfacing the one action you're most likely to want next -- driven by on-device signals about who you are, where you are, and what you're doing right now. The static screen is becoming the exception, not the default. Here's what's actually driving it, what it takes to build, and what it looks like in code -- with Flutter examples throughout. From static layout to living surface The old personalization playbook was recommendation, not adaptation. Netflix reordered a content row; Spotify built you a playlist. The chrome around those recommendations -- the navigation, the layout, the visual system -- stayed frozen. Context-aware UX pushes personalization down into the interface itself. Concretely, an adaptive UI reacts to signals like these: Motion and activity -- accelerometer and gyroscope tell you the user is walking, driving, or still. A UI can enlarge touch targets and simplify layout when it detects movement, cutting mis-taps. Location and environment -- outdoors in bright light, boost contrast and switch to a high-legibility mode; on a known Wi-Fi network at home, load richer media. Time and calendar -- automatic dark mode at night, a leaving-for-a-meeting layout when the next calendar event is 15 minutes out. Usage history -- promote the three features this user actually touches, demote the ones they never open. A finance app foregrounds transfer for a power user and check balance for a casual one. Device and networ

## An insider argues that Google remains committed to Flutter and Dart

DevFeed: [An insider argues that Google remains committed to Flutter and Dart](<https://devfeed.tech/articles/i-ve-been-a-flutter-gde-for-8-years-here-s-the-ground-truth-on-flutter-is-dying-23052.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/ive-been-a-flutter-gde-for-8-years-here-s-the-ground-truth-on-flutter-is-dying-6ffc50ca4088?source=rss----86fb29d7cc6a---4>)

Author: Randal L. Schwartz

Published: 2026-08-19T16:02:19Z

Content type: opinion

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Dart](<https://devfeed.tech/topics/dart.md>), [Google](<https://devfeed.tech/topics/google.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>)

Tags: [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [dart](<https://devfeed.tech/tags/dart.md>), [devrel](<https://devfeed.tech/tags/devrel.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [google](<https://devfeed.tech/tags/google.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [programming](<https://devfeed.tech/tags/programming.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>)

### AI overview

This commentary argues, from the author's stated experience as a Flutter Google Developer Expert, that Google remains committed to Flutter and Dart despite restructuring-related concerns and reduced public communication. It cites renewed advocacy and investment in rendering, Dart ergonomics, WebAssembly compilation, and multiplatform performance.

### Source excerpt

Every few months, like clockwork, the tech blogosphere gets flooded with the same recycled headline: "Is Flutter Dying?", "Why CTOs Are Quietly Leaving Flutter", or "Why Google is Killing Its Cross-Platform Bet." 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 clickbait. "Flutter is dead." -- Said every six months since 2018. Meanwhile: Flutter is kicking tail on every single measurable scale. The alarmist articles point to standard corporate reorganizations, shifting tech job boards, and "state management fatigue" as evidence of Flutter's demise. But having watched this ecosystem evolve from an experimental alpha into an enterprise powerhouse, the reality on the ground is the exact opposite. Here is the real insider story on what's actually happening with Dart and Flutter. 1. The Inside Story: What 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 within the organization. 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 the leadership responded strongly: Revitalized DevRel & Advocacy: A renewed surge in active community engagement, tutorials, and public roadmaps. Enterprise Adoption Transparency: Showcasing massive internal and external production milestones. Aggressive Core Investment: Deep work on the Impeller rendering engine, Dart 3.x ergonomics, WebAssembly (Wasm) compilation, and native multiplatform performance. Flutter is no

## Where I'm Writing Now: The Complete 14-Part BlocSignal Series on DEV.to

DevFeed: [Where I'm Writing Now: The Complete 14-Part BlocSignal Series on DEV.to](<https://devfeed.tech/articles/where-i-m-writing-now-the-complete-14-part-blocsignal-series-on-dev-to-23055.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/where-im-writing-now-the-complete-14-part-blocsignal-series-on-dev-to-2b27b47b00c8?source=rss----86fb29d7cc6a---4>)

Author: Randal L. Schwartz

Published: 2026-08-10T16:00:59Z

Content type: opinion

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Dart](<https://devfeed.tech/topics/dart.md>), [reactive](<https://devfeed.tech/topics/reactive.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [OpenTelemetry](<https://devfeed.tech/topics/opentelemetry.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [bloc](<https://devfeed.tech/tags/bloc.md>), [blocsignal](<https://devfeed.tech/tags/blocsignal.md>), [dart](<https://devfeed.tech/tags/dart.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [dev](<https://devfeed.tech/tags/dev.md>), [developer-community](<https://devfeed.tech/tags/developer-community.md>), [development](<https://devfeed.tech/tags/development.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [series](<https://devfeed.tech/tags/series.md>), [signal](<https://devfeed.tech/tags/signal.md>), [state-management](<https://devfeed.tech/tags/state-management.md>), [tracing](<https://devfeed.tech/tags/tracing.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

The author announces that DEV.to and the Google Developer Experts organization on DEV.to are now the primary publishing hubs for new technical writing. The article presents a 14-part BlocSignal series covering Dart and Flutter state management, architecture, interoperability, dependency injection, tracing, and web development.

### Source excerpt

If you've been following my articles here on Medium over the years, thank you! I wanted to share a quick update on where I'm primarily publishing my new technical deep dives, architectural guides, and Flutter/Dart tutorials. Going forward, my primary writing hub is DEV.to (@randalschwartz) and the official Google Developer Experts (GDE) organization on DEV.to. DEV.to provides a vibrant developer community, native Dart syntax highlighting, and a built-in Series feature that links connected articles into structured, multi-part curricula. 🚀 The New Series: BlocSignal Architecture & Practice Over the last month, my team and I launched BlocSignal -- a production-grade state management framework for Dart and Flutter that bridges BLoC's enterprise discipline with Signals' 0ms synchronous reactivity. We've published a comprehensive 14-part series on DEV.to covering everything from core state machine philosophy and Riverpod/Provider interop to dependency injection, OpenTelemetry tracing, and Jaspr web development. Here is the complete roadmap of all 14 articles available to read right now on DEV.to: 🏛 1. Core Architecture & Philosophy Introducing BlocSignal: Unidirectional Data Flow Meets Reactive Signals The origin story: bridging BLoC semantics with Rody Davis's signals v7 primitives for 0ms microtask queue latency. BLoC meets Signals: How to Pitch BlocSignal to Your Dev Leads How to navigate technical team reviews and explain the enterprise value of synchronous signal graphs. How We Achieved Full BLoC API & Protocol Parity in BlocSignal 0.2.0 A deep dive into BlocProvider, BlocBuilder, BlocListener, BlocConsumer, and context.select parity. Beyond ProviderNotFound: How BlocSignal Rethinks State Location and Synchronous Propagation Solving scope lookups and understanding why synchronous signal updates prevent frame tearing. From Raw Signals to BlocSignal: Taming Reactivity for Enterprise Scale How encapsulating signals inside Cubit/Bloc containers stops global signal "spagh

## GenUI Beyond Chat: Designing a Grammar Book with Flutter GenUI -- Part 1

DevFeed: [GenUI Beyond Chat: Designing a Grammar Book with Flutter GenUI -- Part 1](<https://devfeed.tech/articles/genui-beyond-chat-designing-a-grammar-book-with-flutter-genui-part-1-23051.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/genui-beyond-chat-building-a-grammar-book-with-flutter-and-caching-the-a2ui-output-with-firebase-ecab7b093ccc?source=rss----86fb29d7cc6a---4>)

Author: Cagatay Ulusoy

Published: 2026-08-03T15:15:45Z

Content type: article

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [App](<https://devfeed.tech/topics/app.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [personalization](<https://devfeed.tech/topics/personalization.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Learning](<https://devfeed.tech/topics/learning.md>), [SDK](<https://devfeed.tech/topics/sdk.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [app](<https://devfeed.tech/tags/app.md>), [article](<https://devfeed.tech/tags/article.md>), [feature](<https://devfeed.tech/tags/feature.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [framework](<https://devfeed.tech/tags/framework.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [generative-ui](<https://devfeed.tech/tags/generative-ui.md>), [genuis](<https://devfeed.tech/tags/genuis.md>), [learning](<https://devfeed.tech/tags/learning.md>), [personalization](<https://devfeed.tech/tags/personalization.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This article describes using Flutter GenUI to build an interactive Finnish grammar course inside a language-learning app. It focuses on generating personalized lessons from the learner's language and presenting them as Flutter pages rather than as a long Markdown response.

### Source excerpt

Last year on #FlutterFlightPlans live stream, I asked the Flutter team a question that has stayed with me: Are there any use cases for Generative UI other than chat responses? Can you share some inspiration? Seth Ladd answered, "Let's see what is beyond chat together." 🚀 Since that moment, exploring GenUI beyond chat has been my primary focus. https://medium.com/media/7c53d065806a0337fcf3a8db1412ec82/href I shared my first journey with GenUI in an article series: a small GenUI framework built with Gemini structured outputs, and a migration to Flutter GenUI SDK and A2UI surfaces. Then I tried a different kind of use case: a Finnish 🇫🇮 grammar course inside my Finnish it language-learning app. In this feature, the learner browses a curriculum in their own language, opens one small grammar topic, and moves through a sequence of Flutter pages. https://medium.com/media/3ac419e10db257e4f9652bdfb9ad5165/hrefProblem Definition I had four constraints: I do not speak Finnish, and I am not a language teacher. I don't have time to manually plan and structure a grammar book's worth of micro-lessons in every language. I want interactive application UI, not a long Markdown response. Hyper-personalization is crucial. The explanation should begin from the learner's language. A Turkish learner can approach Finnish vowel harmony through Turkish vowel harmony; an English learner needs another bridge since it has no similar concept. Vowel harmony lessons in English and TurkishThe same rule does not feel equally foreign That fourth constraint is more than UI localization. Turkish speakers will find two familiar concepts in Finnish grammar: attaching grammatical markers directly to the ends of nouns, and changing suffix vowels to match the root word. For example, expressing "in" or "at" requires the exact same mental process in both languages: Turkish: ev + -de = evde (in the house) Finnish: talo + -ssa = talossa (in the house) An English speaker has a completely different starting point.

## Make scalable routing system for your Flutter Apps

DevFeed: [Make scalable routing system for your Flutter Apps](<https://devfeed.tech/articles/make-scalable-routing-system-for-your-flutter-apps-23053.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/make-scalable-routing-system-for-your-flutter-apps-73510bf3d602?source=rss----86fb29d7cc6a---4>)

Author: Kanan Yusubov

Published: 2026-07-29T15:25:43Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Usability](<https://devfeed.tech/topics/usability.md>)

Tags: [clean-architecture](<https://devfeed.tech/tags/clean-architecture.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [go-router](<https://devfeed.tech/tags/go-router.md>), [modular-router](<https://devfeed.tech/tags/modular-router.md>), [modules](<https://devfeed.tech/tags/modules.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [router](<https://devfeed.tech/tags/router.md>), [routing](<https://devfeed.tech/tags/routing.md>), [routing-system](<https://devfeed.tech/tags/routing-system.md>), [usability](<https://devfeed.tech/tags/usability.md>)

### AI overview

This tutorial describes a scalable, decoupled routing system for Flutter apps. It explains a wrapper built on go_router that adds typed route arguments, native and path parameters, cross-module modularization, nested routes, presentation modes, and type-safe route guards.

### Source excerpt

Recently, I've been working on migrating our app's routing system. We previously used auto_route, but eventually realized its tightly coupled nature made it incredibly difficult to scale across independent modules. Furthermore, its heavy reliance on code generation became a bottleneck for our workflow. To resolve this, we decided to architect a clean, scalable, and highly decoupled routing system. Our new solution is a powerful wrapper built on top of go_router. It abstracts away the raw string navigation and supercharges the router with custom features to maximize usability and type safety. In this blog post, I will walk you through the core benefits of this new routing system, covering the following key topics: Unified Routing Protocol (AppRouteInfo) Strictly Typed Route Arguments Native & Path Parameters Support Cross-Module Modularization (AppModuleRouter) Hierarchical Back stack & Sub-Routes (Nested Route Definitions, Decoupled Cross-Module Navigation) Dynamic Presentation Modes (e.g., Native, ModalSheet, NoTransition) Guard Interceptor Mechanism (Type-Safe Redirects, Global Interceptors) Note: This blog will show the general usage and problems it solved. For more detailed code, you can check the following link: https://github.com/thisisyusub/scalable-routing-system-demoArchitectural Structure of Routing System Here is how the demo application is structured to achieve a fully decoupled, scalable routing system: scalable_routing_system_demo (main app): The entry point of the application responsible for wiring up all services, dependency injection, and global route configurations. app_routes: Houses all route definitions, parameters, routing protocols, and models to ensure fully type-safe navigation. This is decoupled from the core routing package to separate app-specific business needs from generic routing mechanics. routing_system (core router): A generic, domain-agnostic router package that has zero knowledge of the app's specific routes. It exclusively provid

## Everything You Need to Know About Patrol in 2026

DevFeed: [Everything You Need to Know About Patrol in 2026](<https://devfeed.tech/articles/everything-you-need-to-know-about-patrol-in-2026-23049.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/everything-you-need-to-know-about-patrol-in-2026-097c09ce8a7e?source=rss----86fb29d7cc6a---4>)

Author: LeanCode

Published: 2026-07-24T02:52:52Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Mobile Testing](<https://devfeed.tech/topics/mobile-testing.md>), [ui-testing](<https://devfeed.tech/topics/ui-testing.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Web](<https://devfeed.tech/topics/web.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [automation-testing](<https://devfeed.tech/tags/automation-testing.md>), [ci](<https://devfeed.tech/tags/ci.md>), [e2e-testing](<https://devfeed.tech/tags/e2e-testing.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [flutter-app-development](<https://devfeed.tech/tags/flutter-app-development.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-testing](<https://devfeed.tech/tags/mobile-testing.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [ui-testing](<https://devfeed.tech/tags/ui-testing.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

This article explains Patrol, an open-source multiplatform end-to-end UI testing framework for Flutter apps. It describes how Patrol combines Flutter testing APIs with native Android and iOS UI automation to test Flutter widgets alongside system dialogs, biometric prompts, notifications, and other native interfaces, while integrating with CI pipelines and device farms.

### Source excerpt

Author: Katarzyna Szulc from LeanCode Patrol has come a long way from being "just another Flutter testing tool." Today, it powers end-to-end testing across Android, iOS, and Web, integrates with native testing infrastructure, runs on cloud device farms, offers AI-powered testing capabilities, and continues to push the boundaries of what's possible in the Flutter ecosystem. No matter if you've been following Patrol for a while or you're simply looking for the best way to handle Flutter E2E testing, this article is the perfect place to catch up. What exactly is Patrol? Let's break it down Developed by LeanCode, Patrol is a powerful, open-source, multiplatform E2E UI testing framework for Flutter apps that overcomes the limitations of integration_test by handling native interactions. Let's dig deeper into that. Flutter's greatest strength also creates one of its biggest testing challenges. Unlike native apps, Flutter renders its entire UI using its own graphics engine instead of platform-native components. This enables a consistent, pixel-perfect experience across devices, but it also means that native UI automation tools often see a Flutter app as little more than a single canvas. They simply cannot interact with Flutter widgets. The official solution is the integration_test package, which gives tests direct access to the Flutter widget tree. As long as everything happens inside Flutter, it works well. But real apps rarely stay there. System permission dialogs, biometric prompts, notifications, WebViews, and other native UI all exist outside the Flutter runtime, making them inaccessible to integration_test. Patrol bridges this gap. It lets tests interact with both Flutter widgets and native UI elements in a single test. Because Patrol builds on native frameworks such as JUnit and XCTest, it also integrates seamlessly with existing CI pipelines, device farms, and the broader mobile testing ecosystem. If you are new to automating E2E testing in Flutter, you can start by

## Building a Testable Network Layer and Three-Tier State Management in Flutter

DevFeed: [Building a Testable Network Layer and Three-Tier State Management in Flutter](<https://devfeed.tech/articles/building-a-testable-network-layer-and-three-tier-state-management-in-flutter-23048.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/building-a-testable-network-layer-and-three-tier-state-management-in-flutter-bebdd831cf25?source=rss----86fb29d7cc6a---4>)

Author: Veli Bacık

Published: 2026-07-08T15:56:52Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Network](<https://devfeed.tech/topics/network.md>), [API](<https://devfeed.tech/topics/api.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Error Handling](<https://devfeed.tech/topics/error-handling.md>), [JSON](<https://devfeed.tech/topics/json.md>), [ui](<https://devfeed.tech/topics/ui.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [backend](<https://devfeed.tech/tags/backend.md>), [building](<https://devfeed.tech/tags/building.md>), [code](<https://devfeed.tech/tags/code.md>), [dart](<https://devfeed.tech/tags/dart.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [http](<https://devfeed.tech/tags/http.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [integration](<https://devfeed.tech/tags/integration.md>), [json](<https://devfeed.tech/tags/json.md>), [masterclass](<https://devfeed.tech/tags/masterclass.md>), [network](<https://devfeed.tech/tags/network.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [server](<https://devfeed.tech/tags/server.md>), [state-management](<https://devfeed.tech/tags/state-management.md>)

### AI overview

This tutorial explains how to refactor a Flutter application's network and state-management architecture. It introduces a generic, testable network manager and service/model layers, then applies a three-tier state model using Cubit for business state, BlocSelector for targeted rebuilds, and ValueNotifier for widget-local UI state.

### Source excerpt

How to wrap HTTP behind a generic, testable network manager with sealed results -- then drive your screens with a three-tier state model: global Cubit, page Cubit, and widget-local ValueNotifier. Flutter Refactoring Masterclass -- Part 3 GitHub - VB10/flight_booking: Flight App for refactoring real project PRs: #11, #12 📺 Video Series: Network & Service Layer https://medium.com/media/2d40d555e4d8968f1d15fb35e2e91553/hrefhttps://medium.com/media/3d8a8a32a77c98177ba10492a892aed6/href 🤖 Want to apply these changes to your project? See the AI prompt at the end. The Problem In Part 2 we split the login page into View, ViewModel, and Mixin -- but the ViewModel still new'd up a Dio() instance and hard-coded http://localhost:8080 inline. Every screen that talked to the backend did the same thing: create a fresh Dio, paste the base URL, decode JSON by hand, and copy-paste the same if (statusCode == 200) ... else ... catch (e) ladder. That pattern rots fast. A URL change means a project-wide search. A new header (auth token, API version) has to be added everywhere. Error handling drifts -- one screen returns 'Server hatası', another swallows the exception. And nothing is testable, because the network call is welded to the widget. As the video puts it: the person writing the code shouldn't be able to say "this only works with internet" -- the network is a dependency, and dependencies must be managed. There's a second rot: state. setState rebuilds the whole widget on every field change. A page with a loading flag, an error string, and a list re-renders all three even when only one changed. And there's no consistent home for "where does the loading state live" -- sometimes a ValueNotifier, sometimes a bool, sometimes buried in _PageState. This article fixes both on the same module. PR #11 builds a generic network + service + model layer. PR #12 layers a three-tier state model on top -- Cubit for business, BlocSelector for surgical rebuilds, ValueNotifier for widget-local UI. What We Change

## From Structured Outputs to A2UI Surfaces: Migrating to Flutter GenUI SDK

DevFeed: [From Structured Outputs to A2UI Surfaces: Migrating to Flutter GenUI SDK](<https://devfeed.tech/articles/from-structured-outputs-to-a2ui-surfaces-migrating-to-flutter-genui-sdk-23050.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/from-structured-outputs-to-a2ui-surfaces-migrating-to-flutter-genui-sdk-4f09aeacee80?source=rss----86fb29d7cc6a---4>)

Author: Cagatay Ulusoy

Published: 2026-07-08T15:52:59Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Finite-state machine](<https://devfeed.tech/topics/finite-state-machine.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [a2ui](<https://devfeed.tech/tags/a2ui.md>), [ai](<https://devfeed.tech/tags/ai.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [generative-ui](<https://devfeed.tech/tags/generative-ui.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [json](<https://devfeed.tech/tags/json.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [state](<https://devfeed.tech/tags/state.md>)

### AI overview

A tutorial on migrating a hand-built generative UI feature based on Gemini structured outputs to the official Flutter GenUI SDK. It describes a Finnish language-learning app that generates images on demand and uses a five-step wizard to improve image variety.

### Source excerpt

Part 3 of a series "Building Image Assisted Language Learning Practice with Flutter, Firebase and Gemini." Part 1 built the image generation and annotation pipeline. Part 2 built a generative UI framework by hand, using Gemini structured outputs. This part is the migration: same feature, official Flutter GenUI SDK. A year ago, Finnish It was just a side project. This spring, I watched it at the Google Cloud Next developer keynote, and again in the Flutter keynote at Google I/O. It still feels surreal to type that. I am grateful to the Flutter and Firebase teams for the collaboration. This series is my way of giving back. I hope it makes Flutter GenUI SDK click for you the way building this feature made it click for me. Finnish it app featured in Cloud Next and Google IOQuick Recap One of the app's practice exercises is simple: show the learner an image, and they describe it in 🇫🇮 Finnish. The images are generated on demand, not fetched from a fixed image database. In Part 2 the problem was variety. A broad topic like "a native Finnish animal in its habitat" kept producing the same handful of scenes. Turning up temperature did not fix it, because it was never really a sampling problem. An under-specified prompt has a few big probability peaks, and the sampler just jitters around them. The fix was to stop asking the model to "be random" and move the entropy into the UI: a five-step wizard where the user picks the season, the setting, the story, the framing, and the visible details. Gemini designs the questions; the user provides the variety. That worked. The repetition problem was solved. The machine I built by hand To make it work, I built a small finite state machine (FSM) which walked the user through five steps. Each step asked Gemini for question set, constrained by a response schema, and parsed the JSON into a typed object that a widget could render: final response = await model.generateContent( [Content.text(_buildRefinementStateRequest(state, topic, selections

## Build your own Flutter GenUI solution with Gemini structured outputs

DevFeed: [Build your own Flutter GenUI solution with Gemini structured outputs](<https://devfeed.tech/articles/build-your-own-flutter-genui-solution-with-gemini-structured-outputs-23047.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/build-your-own-flutter-genui-framework-with-gemini-structured-outputs-a6db3653b9b6?source=rss----86fb29d7cc6a---4>)

Author: Cagatay Ulusoy

Published: 2026-06-09T12:28:28Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>)

Tags: [ai-image-generator](<https://devfeed.tech/tags/ai-image-generator.md>), [building](<https://devfeed.tech/tags/building.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [firebase-ai-logic](<https://devfeed.tech/tags/firebase-ai-logic.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [framework](<https://devfeed.tech/tags/framework.md>), [generative-ui](<https://devfeed.tech/tags/generative-ui.md>), [llm](<https://devfeed.tech/tags/llm.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how to build a Flutter generative UI framework by hand with Gemini structured outputs. It introduces a guided five-step refinement flow in which Gemini generates topic-aware options, Flutter renders them as UI controls, and the selected values become structured data for a more specific image prompt.

### Source excerpt

Part 2 of a series "Building Image Assisted Language Learning Practice with Flutter, Firebase and Gemini." Part 1 built the image generation and annotation pipeline. This part buids a generative UI framework by hand, using Gemini structured outputs. Part 3 is the migration: same feature, official Flutter GenUI SDK. In Part 1, I built the first image description practice pipeline for my Flutter app. A user chooses a topic, Firebase and Gemini generate a practice image for the selected topic, and Gemini 3 adds visual annotations on top of the image. That pipeline worked. But after generating enough practices, a different problem became clear. The system could produce valid images, but the variation was limited. For some topics, Gemini kept returning to the same kind of scene, even when the prompt asked for ramdomness explicitly. This post starts one step before image generation. Instead of making the final prompt longer and hoping for more variety, I changed the input flow: what if the user could shape the scene through a guided UI before the image was generated? That led to a five step refinement flow. For each step, Gemini generates topic aware options, such as season, setting, action, framing, mood, and visual details. Flutter renders those options as normal UI controls. The user chooses what they want, and the app stores those choices as structured data before turning them into a more specific image prompt. I did not begin by trying to build a GenUI framework. I was just trying to stop my image generator from repeating itself. But by the end, the system had schemas, widget catalogs, state transitions, and LLM planned screens. So let's start with the original problem. Selected topic: Shopping and errands in Finnish everyday life1. A quick recap My app helps people practice 🇫🇮 Finnish. One of the core exercises is showing the learners a picture and ask them to describe it out loud, then give feedback. The user experience is simple. The content problem behind it is n

## Why I Think On-Device AI Changes Mobile Architecture

DevFeed: [Why I Think On-Device AI Changes Mobile Architecture](<https://devfeed.tech/articles/why-i-think-on-device-ai-changes-mobile-architecture-23056.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/why-i-think-on-device-ai-changes-mobile-architecture-3cc6b09afd83?source=rss----86fb29d7cc6a---4>)

Author: Akansha Jain

Published: 2026-06-03T17:56:53Z

Content type: opinion

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [On-device AI](<https://devfeed.tech/topics/on-device-ai.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Flutter](<https://devfeed.tech/topics/flutter.md>), [Android](<https://devfeed.tech/topics/android.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [dart](<https://devfeed.tech/tags/dart.md>), [data](<https://devfeed.tech/tags/data.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [llm](<https://devfeed.tech/tags/llm.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [on-device](<https://devfeed.tech/tags/on-device.md>), [on-device-ai](<https://devfeed.tech/tags/on-device-ai.md>)

### AI overview

This opinion article argues that on-device AI changes mobile application architecture by reducing dependence on network APIs. It discusses connectivity, per-call costs, and user-data concerns, drawing on a Flutter camera-demo crash involving a model already loaded on an Android phone.

### Source excerpt

What a crashed app taught me about on-device AI -- and why I think you should care. I was building the demo I'd been planning for weeks. Flutter app running. Model loaded. Chat screen looking clean. I opened the camera -- the feature I was most excited about -- pointed it at something on my desk, and the app just crashed. Not a Dart exception. Not a red error screen. The whole thing just died. I stared at my Redmi Note 7 Pro for a second, opened it again, tried once more. Same result. Every single time I launched the camera with the model already loaded, Android killed my app. It took me longer than I'd like to admit to understand why. And when I finally did, I realised I'd been thinking about AI in mobile apps in a way that was quietly wrong for a long time. Before that, let me back up. For the past couple of years, whenever I wanted to add an AI feature to an app, the answer was pretty obvious: use an API. Need a chatbot? API. Need to analyze an image? API. Need text summarisation? API. A few lines of Dart, a request goes out, and something surprisingly intelligent comes back. It worked well enough that I stopped questioning the architecture behind it. Every one of those API calls travels over the network, gets processed on hardware you don't own, and comes back. Which means three things are always true, and always have been: The feature needs internet. Which is fine until you're in a metro tunnel, on a flight, or somewhere with patchy coverage. Your app just stops being smart. Users notice -- and they don't file bug reports, they just leave. You pay for every call. At low volume it's fine. At scale, it genuinely isn't. 10,000 users x 50 queries a day x per-token pricing. At low volume you barely notice it. At scale, those costs become a product decision. User data leaves the device. The health app where someone is logging symptoms. The finance app where they're describing their expenses. The journal app where they're writing things they wouldn't say out loud. For tho