<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Flutter - Medium]]></title>
        <description><![CDATA[Flutter is Google&#39;s UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.dev - Medium]]></description>
        <link>https://blog.flutter.dev?source=rss----4da7dfd21a33---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Flutter - Medium</title>
            <link>https://blog.flutter.dev?source=rss----4da7dfd21a33---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 31 May 2026 16:35:05 GMT</lastBuildDate>
        <atom:link href="https://blog.flutter.dev/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[That’s a wrap: Everything Flutter at Google I/O 2026]]></title>
            <link>https://blog.flutter.dev/thats-a-wrap-everything-flutter-at-google-i-o-2026-f316e57186e3?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/f316e57186e3</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <category><![CDATA[googleio]]></category>
            <dc:creator><![CDATA[Emma Twersky]]></dc:creator>
            <pubDate>Thu, 28 May 2026 15:43:11 GMT</pubDate>
            <atom:updated>2026-05-28T15:43:09.293Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N5Jz1tLlbGEC9sU49O97IA.png" /><figcaption>Flutter recap at Google I/O 2026!</figcaption></figure><p>What a week! Google I/O 2026 is officially in the books. It’s time to recap the whirlwind of updates for the Flutter and Dart communities.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FvNwCw6uVyTg%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DvNwCw6uVyTg&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FvNwCw6uVyTg%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/d0d2e640108865de13df503f39550e39/href">https://medium.com/media/d0d2e640108865de13df503f39550e39/href</a></iframe><p>The onsite star was a full-sized specialty coffee shop in the absolute center of Google I/O, built entirely with <strong>Flutter GenUI</strong>, where nanobanana-generated artwork was printed right on the coffee foam.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*URQ_4vTl-Zf47WKBM_I8sg.gif" /><figcaption>Just a few generated foam coffee art lattes at I/O</figcaption></figure><p>But don’t worry if you weren’t able to make it to Shoreline. We recorded every moment and more, now available for on-demand viewing on the Flutter YouTube channel.</p><h3>📺 Watch every session</h3><p>From keynote to tech session, we can’t wait for you to see every moment of Flutter from I/O 2026.</p><h3>🌟 What’s new in Flutter</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FI1uIbGh1dGE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DI1uIbGh1dGE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FI1uIbGh1dGE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/8990b6ee337f71dd5fe4b546e415b28e/href">https://medium.com/media/8990b6ee337f71dd5fe4b546e415b28e/href</a></iframe><p>A few of the highlights:</p><ul><li><strong>Flutter 3.44 &amp; Dart 3.12:</strong> These releases brought major advancements with Agentic Hot Reload, GenUI with a showcase from Li-Te Cheng on the DeepMind team, Toyota has embedded Flutter in the 2026 RAV4, improved rendering performance with Impeller, decoupling of Material and Cupertino UI from the framework, Swift Package Manager is on by default for iOS and macOS, Canonical now leads the Flutter desktop roadmap, and significant updates to platform-specific fidelity with HCPP.</li></ul><h3>🌟 Vibe once, run anywhere with Antigravity and Flutter</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FUNdQhnpm8GY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DUNdQhnpm8GY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FUNdQhnpm8GY%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/09b6dd58a4887dc5633ea68bfd9b4f22/href">https://medium.com/media/09b6dd58a4887dc5633ea68bfd9b4f22/href</a></iframe><ul><li><strong>What you’ll learn:</strong> A technical introduction to <strong>Antigravity</strong>, a new IDE focused on building with agents. You will learn how to leverage “vibe-based” development to create experiences that adapt and run across all platforms seamlessly.</li><li><strong>Why it matters:</strong> It provides the architectural roadmap for shifting from “hard-coded” layouts to “vibe-based” generative experiences, allowing your app to adapt to user needs on the fly.</li></ul><h3>How to write really good Flutter code</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FO0UjId1VoRU%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DO0UjId1VoRU&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FO0UjId1VoRU%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/9f58da82d9e2e2741f0dca7f94fd8ad5/href">https://medium.com/media/9f58da82d9e2e2741f0dca7f94fd8ad5/href</a></iframe><ul><li><strong>What you’ll learn:</strong> Principles for writing high-quality, maintainable Flutter code, and how modern tooling — including Widget Previews, DevTools, MCP servers, and Skills make it easier than ever to build great apps.</li><li><strong>Why it matters:</strong> AI can write code faster than ever, but best practices and robust tooling provide the quality control needed to keep Flutter applications maintainable over time.</li></ul><h3>Introducing the Full-stack developer series</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FhNbY3Bmgojg%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DhNbY3Bmgojg&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FhNbY3Bmgojg%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/bad79e0eff962643793221a0cd6221d1/href">https://medium.com/media/bad79e0eff962643793221a0cd6221d1/href</a></iframe><ul><li><strong>What you’ll learn:</strong> Not a lot, but this less-than-two-minute video is fun and introduces the four episode series.</li></ul><h3>Full-stack dev series #1 — Flutter + A2UI = GenUI</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FtXeyaV1gVJk%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DtXeyaV1gVJk&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FtXeyaV1gVJk%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/8e6e3475075373507769ac7196f467ab/href">https://medium.com/media/8e6e3475075373507769ac7196f467ab/href</a></iframe><ul><li><strong>What you’ll learn:</strong> A technical deep dive into the building blocks of Generative UI, with a top-to-bottom conversion of a text-based chatbot into an agent that creates its own UI and understands how you interact with it.</li><li><strong>Why it matters:</strong> Not only can GenUI turn a slow, text-based experience into a delightful one, but it opens up new user experience patterns in which static designs and route hierarchies become flexible, on-demand UI tailored to individual users and their goals.</li></ul><h3>Full-stack dev series #2 — Full-stack Dart</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FVXFDkg96f4I%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVXFDkg96f4I&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FVXFDkg96f4I%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/8b309475a3a177738681eaa0e38b7568/href">https://medium.com/media/8b309475a3a177738681eaa0e38b7568/href</a></iframe><ul><li><strong>What you’ll learn:</strong> How to unify your app’s tech stack and eliminate context switching by using Dart for both frontend and backend logic. This video builds a complete serverless application live, using <strong>Dart for Firebase Cloud Functions</strong>.</li><li><strong>Why it matters:</strong> This approach improves development velocity and reduces costs by allowing teams to share logic, tooling, and expertise across the entire application stack.</li></ul><h3>Full-stack dev series #3 — Introducing Genkit Dart</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FQO30-W3b_vw%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DQO30-W3b_vw&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FQO30-W3b_vw%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/d037fb1519626dc6975acc1f66635de5/href">https://medium.com/media/d037fb1519626dc6975acc1f66635de5/href</a></iframe><ul><li><strong>What you’ll learn:</strong> How to create Genkit flows that power your app’s backend and frontend, and discover the essential security steps needed to protect your AI endpoints. This video covers everything from initial setup to implementing rate limits and caching to keep your project secure and cost-effective.</li><li><strong>Why it matters:</strong> Genkit bridges the gap between prototyping and shipping reliable AI applications. It simplifies building AI into existing code by providing a unified SDK across multiple languages and models, alongside robust debugging and monitoring tools. Genkit works as a backend, but also in your Flutter app!</li></ul><h3>Full-stack dev series #4 — Everything you don’t know about building great native apps with Flutter</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F2z7U6GU7QwQ%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D2z7U6GU7QwQ&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F2z7U6GU7QwQ%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/2b5e1e2d549d52cf459569e22273ef96/href">https://medium.com/media/2b5e1e2d549d52cf459569e22273ef96/href</a></iframe><ul><li><strong>What you’ll learn:</strong> All the small additions we’ve made to Flutter to make a compelling native experience, from embracing native workflows, supporting new languages for Dart binding generation, or new rendering methods that balance the needs of host UIs and Flutter</li><li><strong>Why it matters:</strong> Flutter is not about finding a “lowest common denominator.” It is about providing a high-fidelity, high-performance framework that respects and enhances the native platforms it runs on.</li></ul><p>…and that’s it!</p><p>Thank you all for joining along as we brewed up one of our favorite I/Os yet. Stay tuned for more blog posts, videos and docs about everything we announced, and <a href="http://flutter.dev/events">all of the community events</a> we’re attending starting next month.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*np8TNr84DxJv7bO_nx_h8g.jpeg" /><figcaption>Farewell from Google I/O 2026!</figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f316e57186e3" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/thats-a-wrap-everything-flutter-at-google-i-o-2026-f316e57186e3">That’s a wrap: Everything Flutter at Google I/O 2026</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s new in Flutter 3.44]]></title>
            <link>https://blog.flutter.dev/whats-new-in-flutter-3-44-b0cc1ad3c527?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/b0cc1ad3c527</guid>
            <category><![CDATA[developer-tools]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Khanh Nguyen]]></dc:creator>
            <pubDate>Wed, 20 May 2026 18:01:02 GMT</pubDate>
            <atom:updated>2026-05-29T18:53:44.515Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vZ-dmpSHSo3nF0ChZDb02A.gif" /><figcaption>Flutter 3.44: Scaling to more users on more devices!</figcaption></figure><p>Empowering developers at Google I/O 2026</p><p>Flutter 3.44 is here, and it’s a big one! This release celebrates a milestone in the Flutter timeline: Hybrid Composition++ for Android, Swift Package Manager as the new iOS/macOS default, and improved Vulkan support for Impeller. We’re previewing multi-window desktop support with Canonical as our new lead maintainer, and embarking on a major architectural evolution by decoupling Material and Cupertino from the core framework. We’re redefining UX for agentic user experiences with GenUl and reimagining developer experience with Agentic Hot Reload and Dart &amp; Flutter Agent Skills. Flutter is empowering the next generation of apps-everywhere from the 2026 Toyota RAV4 multimedia system to the upcoming LG webOS SDK. We’re so excited to share all of the news and updates with you; welcome to Flutter 3.44!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*gz1il93fimwoqoeeWXnROA.gif" /><figcaption>Flutter is everywhere, everyday, built by everyone, for everyone.</figcaption></figure><p>This year’s Flutter theme at Google I/O is: Flutter is everywhere, everyday, built by everyone, for everyone.</p><p>“Everywhere, everyday” stems from a Tuesday realization I had using an app on my phone: Flutter apps were part of my life everywhere, from tracking my meals in the Bay Area to shopping while I was in Japan. The numbers back this up: The pub.dev ecosystem is more popular than ever, with over <strong>1.3 billion package downloads</strong>, in the last 30 days alone. Flutter is now the <strong>second most popular development SDK for mobile </strong>on both major app stores with over <strong>1.5 million monthly developers</strong>, a 50% increase in just one year.</p><p>“Built by everyone, for everyone” reflects a chat with my Google I/O co-host, Kate Lovett, about the joy of our global community. Our <strong>1,700+ committed and passionate contributors</strong> are the engine behind this progress, landing <strong>5,800 changes in the core repository</strong> this past year. In this release cycle alone, we’ve landed <strong>972 commits</strong> from <strong>178 unique contributors</strong>, including <strong>61 new contributors</strong> landing their first commits. Our community remains the lifeblood of Flutter, ensuring it truly is built by everyone, for everyone. THANK YOU!</p><p>There are lots of changes to tell you about. You might also want to check out the <a href="https://dart.dev/blog/announcing-dart-3-12">changes in the Dart 3.12 release</a>.</p><h3>Developer experience</h3><p>We want to make the experience of building apps with Flutter as productive as possible, whether you’re writing code by hand or iterating with your favorite coding agent. In this release, we are improving upon our existing suite of developer tools and introducing new ones to augment your development workflows.</p><h4>DevTools performance improvements</h4><p>We’re introducing fine-grained analysis to boost efficiency and we’ve made performance improvements for analysis of projects with many files or directories.</p><p>We’ve also added more stability and performance improvements to Flutter DevTools, including a change to use WASM by default, which makes DevTools snappier and more responsive.</p><p><strong>Learn more</strong>: Release notes for DevTools <a href="https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.55.0">2.55.0</a> and <a href="https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.57.0">2.57.0</a>.</p><h4>Widget Previews (experimental)</h4><p>This release brings further performance improvements and features to the Widget Preview environment:</p><ul><li><strong>Preview detection rewrite</strong>: The detection logic now utilizes the Dart Analysis Server, significantly reducing memory usage by the flutter tool. For IDE users, overall memory usage should be reduced by up to 50%.</li><li><strong>Preview filtering</strong>: It’s now possible to filter previews by group, name, and script and package URIs, making it easier to work in projects with many previews. Special thanks to community member<a href="https://github.com/NamanGoyalK"> NamanGoyalK</a> for this<a href="https://github.com/flutter/flutter/pull/184023"> contribution</a>!</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*AWOBIU0sytlgElyB3n-x9w.gif" /><figcaption>Widget Previews enables you to preview standalone widgets in isolation, separate from your full app</figcaption></figure><p><strong>Learn more</strong>: <a href="https://docs.flutter.dev/tools/widget-previewer">Flutter Widget Previewer</a></p><h4>Rosetta-free native Apple Silicon support</h4><p>Mac developers running Apple Silicon chips no longer need to install the Rosetta translation layer to run Flutter. All macOS command-line tools, including our iOS device communication binaries, have been updated to run natively on ARM. This update arrives ahead of Apple’s planned deprecation of Rosetta translation support, ensuring your development environment is future-proofed on Apple hardware. Looking ahead, a future release of Flutter will end support for Intel x86 Macs entirely. If your team still relies on Intel-based Mac hosts for development, you should begin planning your hardware migration.</p><p><strong>Learn more</strong>: <a href="https://support.apple.com/en-us/102527">Using Intel-based apps on a Mac with Apple silicon</a> (support.apple.com)</p><h4>Reimagining developer experience in an AI-driven world</h4><p>Over the last year, the Dart and Flutter ecosystem has witnessed an explosion of agent-based tools like Antigravity, Gemini CLI, Claude Code, and Cursor which are fundamentally evolving the developer’s role into one of architecting and coordinating with agents. To support this transition, we’ve focused on enhancing our developer experience foundation and introducing new tools to augment your development workflows.</p><p><strong>Seamless coding agent integration with Agentic Hot Reload</strong></p><p>In a big leap forward for AI-assisted development, we are launching Agentic Hot Reload: The MCP server and your favorite coding agent will now automatically find and connect to running Dart and Flutter applications. This means coding agents like Antigravity can now hot-reload your running app out of the box! When you prompt your AI assistant to edit a UI, the agent writes the code and triggers a hot reload automatically to show you the result instantly, no manual setup needed. Go ahead and try it! We’ve also…</p><ul><li><strong>Hardened dependency search</strong>: Agents can now read and search files inside package dependencies safely, without requiring full access to your local pub cache.</li><li><strong>Consolidated tools</strong>: We consolidated our MCP tool definitions, significantly reducing token costs for your agent workflows.</li></ul><p>Check out Agentic Hot Reload in action:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6n-KEHq1VjiglHNYTPV-yQ.gif" /><figcaption>Agentic Hot Reload: You can prompt your agent to make a change, and it now automatically connects to and hot reloads your running app</figcaption></figure><p>We also recently launched <strong>Agent Skills for Dart and Flutter</strong>, equipping your coding agents with task-oriented, production-grade domain expertise. These skills level up your coding agent and help you save tokens when completing tasks such as adding integration tests or setting up localization, while adhering to recommended best practices.</p><p><strong>Learn more</strong>: <a href="https://blog.flutter.dev/introducing-skills-for-dart-and-flutter-23837c6ec0ae">Introducing skills for Dart and Flutter</a>, <a href="https://docs.flutter.dev/ai/mcp-server">Dart and Flutter MCP server</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qw6H8YVAmVFUWuI0b38bZg.gif" /><figcaption>Dart &amp; Flutter Agent Skills give your agent step-by-step instructions on how to complete a variety of tasks, like writing integration tests</figcaption></figure><h4>AI on every screen with Flutter: Building the next generation of AI-native apps</h4><p>As AI-driven features evolve from simple content summaries to fully agentic assistants, we are focused on expanding the Dart and Flutter ecosystem to provide the infrastructure needed for these experiences on every platform.</p><p><strong>Firebase AI Logic</strong></p><p>Firebase AI Logic enables you to call the Gemini API client-side from your Flutter apps.</p><p><a href="https://macrofactor.com/">MacroFactor</a> is a Flutter app that uses <a href="https://pub.dev/packages/firebase_ai">Firebase AI Logic</a> to connect directly to a Gemini model and leverage its multimodal capabilities. I’ve been using it to track my meals, simply by taking a picture. It’s a great example of an app that’s used AI to turn a tedious chore into a delightful, seemingly magical user experience.</p><p>Firebase AI Logic now features <a href="https://firebase.google.com/docs/ai-logic/server-prompt-templates/get-started?api=dev#high-level-use-template-in-code">Server Prompt Templates</a>, removing the need to embed prompts directly into your application code.</p><p><a href="https://firebase.google.com/docs/ai-assistance/agent-skills">Firebase Agent Skills for Flutter</a> are now available, providing step-by-step guidance to help you build full-stack Flutter and Firebase applications more effectively.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uq-70ckWhRQm15bI26Evfg.png" /><figcaption>MacroFactor is a Flutter app that uses Firebase AI Logic to make API calls directly to Gemini models, leveraging its multimodal vision capabilities to simplify the user journey for logging meals.</figcaption></figure><p><strong>Learn more:</strong> <a href="https://cloud.google.com/customers/macrofactor">MacroFactor revolutionizes nutrition with AI for 400k+ users with Firebase, Flutter, and Gemini</a></p><p><strong>Genkit Dart in preview</strong></p><p>We’re also excited to share the preview launch of Genkit Dart, an open-source framework for building full-stack, AI-powered and agentic apps. It has a model-agnostic API that supports providers like Google, Anthropic, and OpenAI. It comes with everything you need to go from prototype to production, including type-safe structured output, tool calling, multi-turn conversations, and built-in observability.</p><p>You can run Genkit Dart server-side or client-side in Flutter apps, too!</p><pre>import &#39;package:genkit/genkit.dart&#39;;<br>import &#39;package:genkit_google_genai/genkit_google_genai.dart&#39;;<br><br>void main() async {<br> final ai = Genkit(plugins: [googleAI()]);<br><br> final response = await ai.generate(<br>   model: googleAI.gemini(&#39;gemini-flash-latest&#39;),<br>   prompt: &#39;Why is Dart a great language for AI<br>            applications?&#39;,<br> );<br><br> print(response.text);<br>}</pre><p><strong>Learn more</strong>: <a href="https://dart.dev/blog/announcing-genkit-dart-build-full-stack-ai-apps-with-dart-and-flutter">Genkit Dart: Build full-stack AI apps with Dart and Flutter</a></p><h4>Gemma 3n Impact Challenge</h4><p>We’re incredibly proud to see Flutter developers pushing the boundaries of what’s possible with AI. A huge congratulations to Tommaso Giovannini, creator of Gemma Vision, and Guido Marangoni, creator of Vite Vere, for their first and second place wins in the <a href="https://www.kaggle.com/competitions/google-gemma-3n-hackathon">Gemma 3n Impact Challenge</a> last year. Both chose Flutter to build life-changing tools:</p><ul><li>Gemma Vision helps those with visual impairments perceive the world</li><li>Vite Vere assists those with cognitive disabilities in completing tasks in their daily lives.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ihBR-fBmc1L-kQdlnAKPNA.png" /><figcaption>Congratulations to Tomasso, creator of Gemma Vision, and Guido, creator of Vite Vere. They won first and second place, respectively, in the Gemma 3n Impact Challenge!</figcaption></figure><p><strong>Learn more</strong>: <a href="https://www.kaggle.com/competitions/google-gemma-3n-hackathon/hackathon-winners">Gemma 3n Impact Challenge winners</a></p><h4>Gemma 4</h4><p>Gemma 4 recently launched, it’s a lightweight, on-device model purpose-built for advanced reasoning and agentic workflows, cost, on-device data constraints, or network constraints. Its multimodal capabilities are fantastic, and I’ve been especially impressed by its ability to do multi-step planning and chaining tool calls.</p><p>Historically, managing these on-device models across diverse hardware was complex. This is why I’m so excited about LiteRT-LM.</p><p><strong>Learn more</strong>: <a href="https://deepmind.google/models/gemma/gemma-4/">Gemma 4</a></p><h4>LiteRT-LM for Flutter</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HeoTr2vo8Ua7b2kL-Qn1-Q.png" /></figure><p>As I was digging into the code for both Gemma Vision and <a href="https://ai.google.dev/competition/projects/vite-vere">Vite Vere</a>, it was inspiring to see both leveraging the flutter_gemma, a plugin available from pub.dev, to integrate with Gemma.</p><p>It’s only going to get better: we’re excited to share that full LiteRT-LM support for Flutter is coming soon to the <a href="https://pub.dev/packages/flutter_gemma">flutter_gemma</a> package.</p><p>LiteRT-LM is Google’s production-ready, high-performance, open-source inference framework. This will abstract hardware differences away and enable you to run powerful on-device AI models like Gemma 4 across devices, all while ensuring peak performance with GPU and NPU acceleration across all 6 of Flutter’s stable platforms: Android, iOS, Web, Windows, Linux, and macOS.</p><p><strong>Learn more</strong>: <a href="https://pub.dev/packages/flutter_gemma">flutter_gemma</a> package and <a href="https://ai.google.dev/edge/litert-lm/overview">LiteRT-LM</a>.</p><h4>Flutter + A2UI = GenUI</h4><p>When it comes to AI-driven user experiences, we can all agree that we’re exhausted by walls of markdown — or worse, plaintext.</p><p>Generative UI, or GenUI, is a UX paradigm where AI constructs and responds with real-time UI, rather than just text, as seen here in the Hatcha Demo app.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZEXlGLmZ6hccimLUin4Jow.gif" /><figcaption>Hatcha is a social event planning app powered by GenUI for Flutter. Hosts plan through a conversational interview while GenUI generates themed invites, tailored components, and planning modules, all shaped by your event and its audience.</figcaption></figure><p>Over the last year, our GenUI team has been pushing this forward as a project partner defining the emerging <a href="https://a2ui.org/">A2UI protocol</a>. A2UI is an open-source protocol from Google that defines how an agent and a client collaborate on the composition and state of a user interface.</p><p>Since launching the Flutter GenUI SDK late last year, we’ve seen incredible momentum, with package downloads up 500% since the beginning of the year.</p><p>A standout example is Catagay Ulusoy’s <strong>Finnish it</strong> (<a href="https://play.google.com/store/apps/details?id=com.sopuacademy.finnishit&amp;hl=en_US">Google Play store</a>, <a href="https://apps.apple.com/us/app/finnish-it-yki-test-practice/id6742380858">Apple store</a>). This app doesn’t just create custom lesson plans to help users learn Finnish; it dynamically composes the perfect UI on the fly for each lesson. If you caught the <a href="https://www.youtube.com/watch?v=A01DQ8_xy7Q">Cloud Next Developer Keynote</a> last month, you might’ve seen Flutter DevRel lead Emma Twersky give the app and Catagay a well-deserved shoutout!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*grXWhNW3A7_zzko3y-oGEA.jpeg" /><figcaption>Flutter DevRel lead Emma Twersky giving the “Finnish It!” app a shoutout in the Google Cloud Next Developer Keynote!</figcaption></figure><p><strong>Learn more</strong>: <a href="https://pub.dev/packages/genui">genui</a> package</p><p><strong>The Visual Layout experiment</strong></p><p>Li-Te Cheng and his team from Google DeepMind were pioneers in the GenUI space. Remember <a href="https://youtu.be/v5tRc_5-8G4?si=WZd3l0ZwLUKt1elU&amp;t=97">this demo</a> that made its rounds within Flutter circles way back in 2023 because of the red debug banner in the demo? Yep, that was Li-Te’s team!</p><p>He joined us for the What’s New in Flutter talk to share his experience building the Gemini App’s “Visual Layout” experiment with Flutter. Here’s the web version:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WEch_2CJNkOt1NChpXZlZw.gif" /><figcaption>Starting from an initial user prompt, the Visual Layout Experiment encouraged users to select, click, and explore information customized and updated on-the-fly through Generative UI.</figcaption></figure><p>He touched on why his team tends to reach for Flutter as their UI toolkit of choice… Hint: It’s the same reason that we all love Flutter:</p><ul><li>Beautiful UI</li><li>Productive developer experience</li><li>Multiplatform support</li><li>An architecture that is perfectly suited for GenUI (Li-Te’s words, not mine! 😉)</li></ul><p>Here were his 3 key takeaways that you can use for your own GenUI projects:</p><ol><li>Lean on opinionated frameworks for AI consistency</li><li>Use an “AI critic” loop to ensure reliable outputs</li><li>Balance speed and control with templates.</li></ol><p>In closing, Li-Te challenged us to go beyond walls of text and chatbots, and instead, build rich, interactive, delightful experiences.</p><p><strong>Learn more</strong>: <a href="https://pub.dev/packages/genui">GenUI SDK for Flutter</a> and, if you want a guided tutorial, <a href="https://codelabs.developers.google.com/codelabs/genui-intro?hl=en#0">try out the Codelab</a>.</p><h3>Android support</h3><h4>Googlebook and peripheral support</h4><p>Flutter is already equipped to handle the new Googlebook laptop, powered by Gemini. Because Flutter targets Android’s large-screen guidelines, apps handle external hardware inputs naturally. Trackpad scrolling, mouse hover states, right-click menus, and keyboard shortcuts work by default. Because Flutter has mature desktop support across macOS, Windows, and Linux, Flutter apps will feel native and responsive on a Googlebook rather than looking like stretched mobile ports. Existing mobile apps will feel at home on a Googlebook without requiring an extensive rewrite.</p><p><strong>Learn more</strong>: <a href="https://blog.google/products-and-platforms/platforms/android/meet-googlebook/">Introducing Googlebook, designed for Gemini intelligence</a></p><h4>Android 17</h4><p>Android 17 is on the horizon, and the team is actively testing Flutter against the latest Android 17 betas to ensure your apps continue to work as expected. We’re also proactively integrating the newest security and usability features like Local Network Protections and safe Dynamic Code Loading.</p><p>You can monitor our ongoing progress on GitHub. We encourage you to <a href="https://developer.android.com/about/versions/17/get">download the Android 17 beta</a> and start testing your apps today. If you run into bugs or notice any missing features, please <a href="https://github.com/flutter/flutter/issues/new/choose">file an issue!</a></p><p><strong>Learn more</strong>: <a href="https://github.com/orgs/flutter/projects/248/">Android 17 GitHub project</a></p><h4>Hybrid Composition++ for Android</h4><p>Embedding native Android components like web views or maps into a Flutter app has historically forced developers to choose between frame rate and fidelity. Older rendering strategies struggled with screen tearing during scrolls, broken text input, or high CPU overhead.</p><p>Flutter 3.44 introduces Hybrid Composition++ (HCPP) as an opt-in feature to solve these problems. Instead of relying on offscreen buffers or forcing the Flutter engine to process native views, HCPP delegates layer compositing directly to the Android OS. The process takes advantage of the Vulkan graphics library’s low level access using hardware buffer swapchains and SurfaceControl transactions to synchronize the Flutter UI with the native Android views.</p><p>The result is high-performance scrolling and accurate touch input. It also brings reliable support for SurfaceView components, which presented challenges for older modes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*xNy4ENkOUVx7fotyFcG8_A.gif" /><figcaption>HC on the left, HCPP on the right</figcaption></figure><p>HCPP has <a href="https://docs.flutter.dev/platform-integration/android/platform-views#hcpp">Android API and hardware requirements</a>, so not all devices can use HCPP even when opted in. There are no new APIs to adopt, and you simply need to enable the flag to upgrade your existing platform views. You can test the new mode before it becomes the default rendering mode in the future by passing the --enable-hcpp flag to your run command, or by adding the configuration flag to your AndroidManifest.xml file:</p><pre>&lt;meta-data<br>  android:name=&quot;io.flutter.embedding.android.EnableHcpp&quot;<br>    android:value=&quot;true&quot; /&gt;</pre><p><strong>Learn more</strong>: <a href="https://docs.flutter.dev/platform-integration/android/platform-views">Hosting native Android views in your Flutter app with Platform Views</a></p><h4>Android display corner radii support</h4><p>To help you build pixel-perfect layouts on modern mobile devices, Flutter now integrates directly with Android hardware to support display corner radii (<a href="https://github.com/flutter/flutter/pull/179219">#179219</a>). Flutter can now query the physical and logical corner radii of the device’s display and expose this information through MediaQuery. This allows your UI to accurately respect the hardware’s geometry, ensuring content is never clipped on aggressively rounded screens.</p><p><strong>Learn more</strong>: <a href="https://main-api.flutter.dev/flutter/widgets/MediaQueryData/displayCornerRadii.html">MediaQueryData.displayCornerRadii</a></p><h4>Android Gradle Plugin 9.0 and built-in Kotlin</h4><p>Prior to Android Gradle plugin (AGP) 9, Android app and plugin developers had to manually add the Kotlin Gradle plugin (KGP) to their build files so the system could understand and compile Kotlin code. As of AGP 9.0, the Android build system handles Kotlin natively. Because the build system already knows how to process Kotlin, manually adding the separate KGP now creates a conflict and causes a build failure. This breaking change affects apps and Flutter plugins that apply KGP.</p><p>The Flutter team added temporary backwards compatibility to keep existing projects building safely. Support for manually applying KGP will be removed in a future release.</p><p><strong>Instructions for app developers</strong></p><p>If you develop Flutter apps, you need to update your Android build files to remove the separate Kotlin Gradle plugin (KGP).</p><p>Note: If your migrated app uses a Flutter plugin that still applies KGP, your build will fail. Since only the plugin author can fix this, please <a href="https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-app-developers#report-incompatible-kotlin-gradle-plugin-usage-to-plugin-authors">report the issue to the plugin author</a>.</p><p><strong>Learn more</strong>: For full step-by-step instructions, see the <a href="https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-app-developers">app developer migration guide</a>.</p><p><strong>Instructions for plugin authors</strong></p><p>The migration process for plugins requires similar Gradle file changes, plus an important version constraint update. To ensure compatibility, you must update your pubspec.yaml file to <em>set a minimum Flutter version constraint of 3.44</em>.</p><p><strong>Learn more</strong>: For the full checklist, refer to the <a href="https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-plugin-authors">plugin author migration guide</a>.</p><p><strong>ABI filtering changes</strong></p><p>ABIs determine which device hardware architectures (like ARM or x86) your compiled app supports. Flutter used to apply ABI filters programmatically to every specific build type, but now configures them once in the base defaultConfig block. Because the AGP 9 combines the default configuration with specific build types and flavors instead of overriding it, using custom ABI settings requires an extra step.</p><p>If your app uses custom abiFilters inside specific build types or product flavors, you now need to pass the -Pdisable-abi-filtering=true flag when building or running your app.</p><p><strong>Learn more</strong>: For more details, see the <a href="https://docs.flutter.dev/deployment/flavors#add-unique-build-settings">flavors guide</a>.</p><h3>iOS support</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TAkSiptrLpWXi-x8V6perA.png" /><figcaption>Swift Package Manager is now the default</figcaption></figure><h4>Swift Package Manager is now the default for iOS and macOS</h4><p>Starting with Flutter 3.44, Swift Package Manager (SwiftPM) replaces CocoaPods as the default dependency manager for iOS and macOS apps. The Flutter CLI handles this migration automatically. When you build or run your app, the CLI updates your Xcode project to use SwiftPM, removing the need to manage Ruby or CocoaPods installations!</p><p><strong>Learn more</strong>: <a href="https://blog.flutter.dev/saying-goodbye-to-cocoapods-swift-package-manager-is-soon-the-default-in-flutter-645a92714a57">Say goodbye to CocoaPods: Swift Package Manager is soon the default in Flutter!</a></p><p>Add-to-App integration is also more flexible. If you embed Flutter into an existing iOS application, the new flutter build swift-package command packages your Flutter app or add-to-app module as a Swift Package for easy consumption in your native project.</p><p><strong>Learn more</strong>: View the <a href="https://docs.flutter.dev/add-to-app/ios/project-setup">updated documentation</a> to learn how to integrate with SwiftPM.</p><p>If your app relies on plugins that still require CocoaPods, the Flutter CLI will print a warning and temporarily fall back to CocoaPods for those dependencies. We recommend asking those package maintainers to update, as CocoaPods support will eventually be removed entirely. To encourage ecosystem adoption, packages with SwiftPM support are now awarded additional points in pub.dev scoring.</p><p>If you maintain an iOS or macOS plugin, you need to add SwiftPM support to your package. If you migrated during the 2024 pilot, make sure you also add FlutterFramework as a dependency in your Package.swift file.</p><p>If SwiftPM causes a breaking issue for your project, you can temporarily disable it by setting --enable-swift-package-manager: false in your pubspec.yaml. If you use this opt-out, please <a href="https://github.com/flutter/flutter/issues/new/choose">file a bug report on GitHub</a> with your Xcode project files so we can investigate. Please note that this opt-out feature will eventually be removed.</p><p><strong>Learn more</strong>: <a href="https://docs.flutter.dev/packages-and-plugins/swift-package-manager/for-plugin-authors">Swift Package Manager for plugin authors</a></p><h4>Flutter supports UIScene</h4><p>Starting with iOS 13, Apple introduced the “Scene”-based lifecycle to support multi-window experiences. During WWDC 2025, Apple announced that apps built with the latest SDK will soon be required to use the UIScene lifecycle to launch. This update is critical in meeting Apple’s requirements for upcoming iOS versions.</p><p>There are no new changes in Flutter 3.44, but we would like to remind you to migrate before Apple starts enforcing this new API by default. The Flutter CLI automatically migrates your app if your AppDelegate hasn’t been customized. However, if your code tinkers with UI lifecycle events, you should follow the full migration guide.</p><p><strong>Learn more</strong>: <a href="https://docs.flutter.dev/release/breaking-changes/uiscenedelegate">UISceneDelegate migration guide</a></p><h4>iOS predictive text (experimental)</h4><p>We are introducing experimental support for native iOS inline predictive text for text input fields (<a href="https://github.com/flutter/flutter/pull/183650">#183650</a>). This feature is off by default, but you can opt-in and test it by enabling TextField.enableInlinePrediction. When enabled, users typing in your app can accept iOS-predicted text (for example, typing “My n” and accepting “ame”) by pressing the <strong>Space</strong> key. Please note that the visual styling for this predictive text is still under active polish, and we appreciate your feedback as we finalize this feature.</p><p><strong>Learn more</strong>: <a href="https://main-api.flutter.dev/flutter/material/TextField/enableInlinePrediction.html">TextField.enableInlinePrediction</a></p><h3>Web</h3><h4>Accessibility</h4><p>Accessibility and user preference parity have also been greatly enhanced, featuring out-of-the-box support for the browser’s prefers-reduced-motion setting to automatically disable animations, alongside immediate screen reader feedback for form validation errors using aria-description.</p><p><strong>Learn more</strong>: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-reduced-motion">prefers-reduced-motion</a> CSS media feature (mozilla.org)</p><h4>Platform and tooling</h4><p>Development workflows and browser integration have never been smoother. The engine now handles autofill in iOS 26 Safari by reusing DOM forms across focus shifts, while refining web scrolling and keyboard event synthesis for robust reliability. Furthermore, the CLI streamlines web app orchestration by bringing --base-href support directly to flutter run, matching production build configurations.</p><p><strong>Learn more</strong>: <a href="https://github.com/flutter/flutter/pull/182024">PR #182024</a>, <a href="https://github.com/flutter/flutter/pull/179703">PR #179703</a>, <a href="https://github.com/flutter/flutter/pull/180692">PR #180692</a></p><h3>Desktop support</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3z_r0es7chMz1dSDxT8zsg.png" /><figcaption>Canonical will lead the Flutter Desktop roadmap and oversee the maintenance of our Linux, Windows, and macOS embedders.</figcaption></figure><p><strong>We are excited to announce an expanded partnership with Canonical, who will now serve as the lead maintainer and Strategic Steward for Flutter Desktop. </strong>With their deep technical expertise, Canonical will lead the Flutter Desktop roadmap and oversee the maintenance of our Linux, Windows, and macOS embedders.</p><p>This collaboration represents just the first step in a broader ecosystem expansion. Moving forward, we are actively expanding our governance with more partners to bring Flutter’s high-performance, multi-platform experience to even more environments and industries.</p><p>Stay tuned to hear more about this partnership!</p><p>To inquire about partnering with the Flutter team, contact <a href="mailto:partners@flutter.dev">partners@flutter.dev</a>.</p><h4>Windowing APIs (experimental)</h4><p><em>⚠️</em><strong><em> Note:</em></strong><em> Windowing features are currently only available on the </em><a href="https://docs.flutter.dev/install/upgrade#switching-flutter-channels"><em>main channel</em></a><em>. They are not yet intended for production use.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*jge3MA91e1nbNjncqu9dtA.gif" /><figcaption>Flutter now supports Tooltips and separate Dialog windows across platforms</figcaption></figure><p>Canonical continues to make excellent progress on desktop’s experimental windowing APIs! New features include:</p><ul><li><strong>Tooltips</strong>: Flutter now supports tooltip windows across Linux, macOS, and Windows (<a href="https://github.com/flutter/flutter/pull/182348">#182348</a>, <a href="https://github.com/flutter/flutter/pull/180895">#180895</a>, <a href="https://github.com/flutter/flutter/pull/179147">#179147</a>).</li><li><strong>Popups</strong>: Flutter now supports popup windows on macOS (<a href="https://github.com/flutter/flutter/pull/182371">#182371</a>), with support for Linux and Windows expected in a future release.</li><li><strong>Dialogs</strong>: Material’s showDialog function now creates a separate child dialog window on platforms that support windowing (<a href="https://github.com/flutter/flutter/pull/181861">#181861</a>).</li></ul><p>Finally, content-sized views are now supported on Linux (<a href="https://github.com/flutter/flutter/pull/182924">#182924</a>). This lets you size a window dynamically based on its content, which is useful for popup or tooltip windows.</p><p><strong>Learn more</strong>: For an early sneak peek of desktop’s experimental windowing APIs, check out the <a href="https://github.com/flutter/flutter/tree/master/examples/multiple_windows">multiple_windows example</a>.</p><h4>Windows stylus support</h4><p>Windows apps built with Flutter got a major upgrade for digital artists and note-takers! Thanks to a brilliant contribution from community member <a href="https://github.com/CodeDoctorDE">CodeDoctorDE</a>, Flutter Windows now supports stylus input, including precise tracking for both stylus rotation and pressure sensitivity.</p><p><strong>Learn more</strong>: <a href="https://github.com/flutter/flutter/pull/165323">PR 165323: Allow stylus support on Windows</a></p><h3>Embedded</h3><h4>Toyota</h4><p><strong>The </strong><a href="https://www.kbb.com/car-news/report-toyota-rav4-takes-worlds-best-selling-car-title/"><strong>Toyota RAV4 was the world’s best selling car in 2025</strong></a><strong>. Now, the 2026 RAV4 is using Flutter to power its multimedia system.</strong></p><p>Last month, I experienced one of the highlights of my career: The opportunity to travel to Plano, TX and visit the Toyota Motor North America &amp; Toyota Connected offices to talk to the engineering team about how Flutter has changed the game for them when it comes to designing, building, and delivering multimedia systems: from the test units in their offices to cars in driveways. As both a Flutter engineer and a car nerd who grew up in a family that only purchased Toyotas, I’m ecstatic to see Flutter running on the 2026 RAV4. I’ve seen them so many times as I’m out and about. (ahem-everywhere??)</p><p>Thank you to the Toyota Motor North America and Toyota Connected teams for hosting us!</p><p>Check out the showcase video:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FX4376aLFHFA%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DX4376aLFHFA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FX4376aLFHFA%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/657eda5032747ccc157142c5863aa830/href">https://medium.com/media/657eda5032747ccc157142c5863aa830/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lQx3GCLqTFbDzK4meOjo1Q.png" /><figcaption>Flutter Outbound product manager, Abdallah, and I getting our photos taken on the Toyota Test Track!</figcaption></figure><p><strong>Learn more</strong>: Toyota’s press release, <a href="https://pressroom.toyota.com/the-latest-evolution-of-toyotas-multimedia-coming-to-a-screen-near-you/">The Latest Evolution of Toyota’s Multimedia Coming to a Screen Near You</a></p><h4>LG</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pdl2nE7Nidvg-oVf8wwKwA.png" /><figcaption>The LG webOS SDK will enable developers build Flutter apps that target WebOS devices</figcaption></figure><p>LG is on the verge of launching the webOS SDK to help developers easily build Flutter apps that target WebOS devices, empowering Flutter for the big screen and beyond.</p><p>The webOS SDK will include plugin support for Firebase, video players, gamepads, and more. It’ll even come with support for all of the Flutter features that you know and love, like stateful hot reload and state management with Riverpod.</p><p>Keep an eye out for this exciting launch in the coming weeks!</p><h3>Graphics and engine enhancements</h3><p>This release brings targeted rendering and performance enhancements to the Impeller backend.</p><h4>Impeller improvements</h4><p><strong>Vulkan</strong></p><p>This release includes several Vulkan improvements including better memory management of caches and more efficient GPU/CPU synchronization in cases where frames are being dropped.</p><p><strong>Cleaner circles with SDFs</strong></p><p>The math for rendering circles has been updated to support cleaner circles using signed-distance functions. There were cases where they would previously be aliased, but that has been resolved. (<a href="https://github.com/flutter/flutter/pull/183536">#183536</a>, <a href="https://github.com/flutter/flutter/pull/183184">#183184</a>)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Je2nftTI2SbCoW0AybhYiQ.png" /><figcaption>Enhanced visual fidelity, utilizing signed-distance functions (SDFs), to ensure high-quality, anti-aliased rendering for complex shapes.</figcaption></figure><p><strong>Shadow and perspective fixes</strong></p><p>Improvement on how Impeller handles perspective matrices, correcting rendering behaviors for shadows and perspective projection transforms. (<a href="https://github.com/flutter/flutter/pull/181434">#181434</a>, <a href="https://github.com/flutter/flutter/pull/183187">#183187</a>)</p><h4>FragmentShader improvements</h4><p>Writing fragment shaders is now more intuitive and less error-prone, thanks to the following enhancements.</p><p><strong>Get Uniform by Name API</strong></p><p>You can now bind uniform variables in your shaders by name instead of manual offsets, dramatically simplifying shader code setup:</p><pre>    void setUp(ui.FragmentShader shader) {<br>      shader.getUniformFloat(&#39;foobar&#39;).set(1.234);<br>    }</pre><p>Learn more: <a href="https://docs.flutter.dev/ui/design/graphics/fragment-shaders">Writing and using FragmentShaders</a>, <a href="https://main-api.flutter.dev/flutter/dart-ui/FragmentShader/getUniformFloat.html">FragmentShader.getUniformFloat</a></p><p><strong>Clearer shader compiler diagnostics</strong></p><p>The shader compiler now generates warnings when compiling shaders that aren’t compatible with Skia, helping you identify cross-platform rendering issues before deploying (<a href="https://github.com/flutter/flutter/pull/182786">#182786</a>, <a href="https://github.com/flutter/flutter/pull/183146">#183146</a>).</p><h3>Framework</h3><p>This release balances significant architectural shifts with a rigorous focus on quality and community-driven refinements. As we begin the strategic decoupling of the Material and Cupertino libraries to standalone packages, the core framework continues to mature with major updates to web rendering, foundational stability improvements, and enhanced platform integration.</p><h4>Material and Cupertino updates</h4><p>This release marks a massive milestone for the Material and Cupertino libraries. These libraries have been frozen as of this release, representing the final set of updates to these libraries within the core framework before they transition to standalone packages: material_ui and cupertino_ui. By the next stable release, the versions of these libraries currently in the framework will be deprecated, and you will be able to migrate to the new, independently-versioned packages.</p><p><strong>Learn more</strong>: For more information on this transition, read the <a href="https://blog.flutter.dev/flutters-material-and-cupertino-code-freeze-d32d94c59c38">blog post about the freeze</a> and follow the <a href="https://github.com/flutter/flutter/issues/172932">main tracking issue for decoupling</a> these libraries from the core framework.</p><p>Despite the freeze, this release is packed with refinements. A major highlight is the modernization of menus in the Cupertino library. The new CupertinoMenuAnchor widget, built on the flexible RawMenuAnchor foundation, provides a more robust and native-feeling menu experience for iOS applications (<a href="https://github.com/flutter/flutter/pull/182036">#182036</a>). This work was made possible by the extensive contributions of community member <a href="https://github.com/davidhicks980">davidhicks980</a>, who also created the RawMenuAnchor widget.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/614/1*7uz0MAnNLfnKOmRGweNcgg.gif" /><figcaption>Example of CupertinoMenuAnchor in action.</figcaption></figure><p><strong>Learn more</strong>: <a href="https://main-api.flutter.dev/flutter/cupertino/CupertinoMenuAnchor-class.html">CupertinoMenuAnchor</a></p><p>On the Material side, menus also receive a polish with the addition of Material 3 animations to the MenuAnchor class. These animations provide a smoother, more responsive feel, and a new hoverOpenDelay parameter on SubmenuButton gives you finer control over submenu interactions. The animation is disabled by default, and is enabled by setting animated to true. (<a href="https://github.com/flutter/flutter/pull/176494">#176494</a>).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*VdQhRElD22jiVdNmjLllhw.gif" /><figcaption>Thee addition of Material 3 animations to the MenuAnchor class.</figcaption></figure><p><strong>Learn more</strong>: <a href="https://main-api.flutter.dev/flutter/material/MenuAnchor-class.html">MenuAnchor</a>, <a href="https://main-api.flutter.dev/flutter/material/SubmenuButton/hoverOpenDelay.html">SubmenuButton.hoverOpenDelay</a></p><p>This release also enables scrollable content within a CupertinoSheetRoute to work seamlessly with the dragging animation, allowing for a more fluid transition between scrolling and dismissing the sheet (<a href="https://github.com/flutter/flutter/pull/177337">#177337</a>). For developers needing custom drag regions, the new scrollableBuilder allows you to pass the managed ScrollController to the body’s scrollable areas to coordinate sheet dragging for you.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/309/1*BbFM0AsTzm5tN8ZSbC-6Aw.gif" /><figcaption>Scrollable content within a CupertinoSheetRoute working seamlessly with the dragging animation</figcaption></figure><p><strong>Learn more</strong>: <a href="https://api.flutter.dev/flutter/cupertino/CupertinoSheetRoute-class.html">CupertinoSheetRoute</a>, <a href="https://main-api.flutter.dev/flutter/cupertino/CupertinoSheetRoute/scrollableBuilder.html">CupertinoSheetRoute.scrollableBuilder</a></p><p>The CarouselView component sees major functional improvements in this release. It now supports infinite scrolling (<a href="https://github.com/flutter/flutter/pull/175710">#175710</a>), allowing you to create seamlessly looping carousels. It also features a new onIndexChanged callback and a leadingItem property on its controller, providing better visibility into the carousel’s state as the user interacts with it (<a href="https://github.com/flutter/flutter/pull/180667">#180667</a>).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*lx61h88hYLIWaeSYuIQ14g.gif" /><figcaption>CarouselView now supports infinite scrolling!</figcaption></figure><p><strong>Learn more</strong>: <a href="https://main-api.flutter.dev/flutter/material/CarouselView-class.html">CarouselView</a></p><p>New design primitives make it easier to achieve sophisticated UI effects, such as the new ShapedInputBorder. This allows Material widgets to create an input border using a shape by specifying any ShapeBorder. This can be useful, for example, for making the Material input border appear in an iOS style using RoundedSuperellipseBorder. (<a href="https://github.com/flutter/flutter/pull/177220">#177220</a>). Similarly, CupertinoFocusHalo now supports the superellipse shape, ensuring consistent focus indicators across different widget geometries (<a href="https://github.com/flutter/flutter/pull/180724">#180724</a>).</p><p><strong>Learn more</strong>: <a href="https://main-api.flutter.dev/flutter/material/ShapedInputBorder-class.html">ShapedInputBorder</a></p><p>Several existing widgets have also been refined. The Expansible widget, which powers Material’s ExpansionTile under the hood, is now more capable. A new toggle method is now available on both ExpansibleController and ExpansionTileController, accompanied by improved documentation and examples (<a href="https://github.com/flutter/flutter/pull/181320">#181320</a>, <a href="https://github.com/flutter/flutter/pull/180273">#180273</a>). Additionally, Material’s list tiles, RadioListTile, CheckboxListTile, and SwitchListTile, now correctly accept a WidgetStatesController, allowing for more programmatic control over their visual states (<a href="https://github.com/flutter/flutter/pull/180367">#180367</a>).</p><h4>Accessibility: a more inclusive experience for all users</h4><p>Making applications accessible to everyone remains a core priority of the Flutter framework. This release introduces deeper integration with platform-specific accessibility settings, improves the precision of semantic announcements, and refines the accessibility of common UI components.</p><p>For iOS developers, this release adds support for several new accessibility motion features (<a href="https://github.com/flutter/flutter/pull/178102">#178102</a>). Your applications can now respond to user preferences for:</p><ul><li><strong>Auto-play animated images</strong>: Detects when a user prefers to pause automatically playing GIFs or other animated content.</li><li><strong>Auto-play video previews</strong>: Informs the app if the user has disabled the automatic playback of video previews.</li><li><strong>Prefer non-blinking cursor</strong>: Allows the app to provide a stable, non-blinking text indicator for users who find blinking cursors distracting or difficult to track.</li><li>These settings are exposed with the AccessibilityFeatures object, enabling you to build more responsive and respectful UIs on iOS.</li></ul><p>Progress indicators also receive a quality-of-life improvement. You can now use percentage strings (such as “50%”) as a SemanticsValue for ProgressIndicator (<a href="https://github.com/flutter/flutter/pull/183670">#183670</a>). This allows screen readers to announce progress in a more natural and human-readable format, rather than just raw decimal values.</p><p>This release also polishes the semantics of core widgets. The Slider widget’s semantics node has been refactored to more accurately reflect its size and position, improving the experience for users who navigate by touch exploration or assistive devices (<a href="https://github.com/flutter/flutter/pull/184168">#184168</a>). Additionally, a fix for scroll views ensures that invisible accessibility elements are no longer incorrectly presented before the scrollable content, leading to a cleaner and more predictable navigation flow (<a href="https://github.com/flutter/flutter/pull/184155">#184155</a>).</p><p>Together, these changes ensure that Flutter applications continue to provide a high-quality, inclusive experience across all platforms.</p><h4>Resiliency for zero-width/height widgets</h4><p>A major effort in this release has been dedicated to improving the framework’s stability when widgets are rendered in “0x0 environments” — scenarios where widgets are given zero width or height, which could previously trigger layout errors or unexpected crashes. Thanks to the gradual, steady contributions of community member <a href="https://github.com/ahmedsameha1">ahmedsameha1</a>, we have added zero-size coverage across many core widgets, including Hero (<a href="https://github.com/flutter/flutter/pull/180954">#180954</a>), Icon (<a href="https://github.com/flutter/flutter/pull/181021">#181021</a>), AnimatedPadding (<a href="https://github.com/flutter/flutter/pull/181235">#181235</a>), and GridPaper (<a href="https://github.com/flutter/flutter/pull/180906">#180906</a>). These updates ensure that your applications remain resilient during complex layout transitions or inside highly constrained viewports.</p><h4>SelectableRegion improvements</h4><p>We have resolved two key issues inside SelectableRegion to improve layout fidelity and text selection behavior across native and web platforms:</p><p><strong>Web layout constraint preservation</strong></p><p>Previously, SelectableRegion could cause its children to shrink unexpectedly when rendering on the web. It now correctly passes all layout constraints unmodified to its children, ensuring consistent sizing behavior (<a href="https://github.com/flutter/flutter/pull/184083">#184083</a>).</p><p><strong>Multiline copy precision</strong></p><p>Text selection within SelectableRegion is now more precise — when users select and copy text that spans multiple lines, line breaks are now properly preserved in the copied output instead of being lost (<a href="https://github.com/flutter/flutter/pull/184421">#184421</a>).</p><h3>Breaking changes and deprecations</h3><p>This release includes several important deprecations and breaking changes as part of the ongoing effort to modernize and improve the Flutter framework.</p><h4>RawMenuAnchor callback adjustments</h4><p>The calling order of some callbacks of RawMenuAnchor has been adjusted to allow more flexible and predictable customization.</p><p><strong>Learn more</strong>: <a href="https://docs.flutter.dev/release/breaking-changes/raw-menu-anchor-close-order">Changing RawMenuAnchor close order</a></p><p>Key deprecations in this release include:</p><ul><li><strong>CupertinoSheetRoute</strong>: The builder and pageBuilder parameters in showCupertinoSheet and CupertinoSheetRoute are now deprecated in favor of scrollableBuilder (<a href="https://github.com/flutter/flutter/pull/177337">#177337</a>). This change allows for better integration of scrollable content with the sheet’s dragging animations.</li><li><strong>ReorderableListView</strong>: The onReorder callback is deprecated in favor of the more precise onReorderItem (<a href="https://github.com/flutter/flutter/pull/178242">#178242</a>). The new callback provides a more predictable newIndex that accounts for the item being removed before being re-inserted.</li><li><strong>Tooling</strong>: The--web-hot-reload flag in the Flutter tool is now deprecated, as hot reload for web is now handled through more modern mechanisms (<a href="https://github.com/flutter/flutter/pull/181884">#181884</a>). Additionally, the plugin_ffi template is deprecated in favor of the more robust plugin template with FFI support (<a href="https://github.com/flutter/flutter/pull/181588">#181588</a>).</li></ul><p><strong>Learn more</strong>: For more details and migration guidance on these and other changes, see the <a href="https://docs.flutter.dev/release/breaking-changes">breaking changes page</a> on flutter.dev.</p><h3>Flutter is everywhere, everyday.</h3><p>Flutter’s reach extends across mobile, desktop, web, and embedded systems, and while individual features are impressive, they collectively deliver a robust platform for developers — empowering over 1.5 million developers to build incredible, user experiences that are used everywhere, everyday. You can find Flutter in everything from business tools and daily apps like <a href="https://www.youtube.com/watch?v=pMoUg3dkDJk&amp;list=PLjxrf2q8roU1yXu4k7ivSLAa0cizD4feH&amp;index=2&amp;pp=iAQB">NotebookLM</a>, <a href="https://www.youtube.com/watch?v=A3ApoV_QRio&amp;list=PLjxrf2q8roU1yXu4k7ivSLAa0cizD4feH&amp;index=1&amp;t=1s&amp;pp=iAQB">Talabat</a>, <a href="https://www.youtube.com/watch?v=YWAuwAR28KY">Zoho</a>, and <a href="https://www.youtube.com/watch?v=N8I-fdOYWnc&amp;pp=0gcJCQQLAYcqIYzv">Karaca</a>, to high-profile embedded implementations like the infotainment system in the 2026 Toyota RAV4 and LG’s webOS devices.</p><h3>Flutter is built by everyone, for everyone.</h3><p>Flutter’s success is built on your feedback! We’re committed to keeping that conversation going — whether through comments, issues, or our upcoming developer survey. Your input is what drives the features you love, so please keep sharing it with us.</p><p>This ecosystem is depended upon by and made up of industry leaders like LG, Toyota, and Canonical — and most importantly, by the over 1.5 million developers building with Flutter everyday. We are so excited to continue building and growing this wonderful Dart &amp; Flutter ecosystem together.</p><p>To try out all the new features, optimizations, and graphics enhancements, all it takes is a simple:</p><pre>flutter upgrade</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b0cc1ad3c527" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/whats-new-in-flutter-3-44-b0cc1ad3c527">What’s new in Flutter 3.44</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Flutter’s multiplatform value for agentic development]]></title>
            <link>https://blog.flutter.dev/flutters-multiplatform-value-for-agentic-development-cb5c7da7c2bc?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/cb5c7da7c2bc</guid>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <dc:creator><![CDATA[Michael Thomsen]]></dc:creator>
            <pubDate>Mon, 18 May 2026 18:42:10 GMT</pubDate>
            <atom:updated>2026-05-18T18:42:09.465Z</atom:updated>
            <content:encoded><![CDATA[<p>The fundamental value of multiplatform development with Flutter lies in building apps that support multiple platforms with just a single, shared source codebase, allowing developer teams to work in unison across all platforms.</p><p>This is crucial in an AI-driven world where enhanced consistency, reduced token usage, and fast market reach become vital. By maintaining a single codebase, builders can focus their AI assistants on one unified context, drastically reduce token overhead, and minimize AI hallucinations. Instead of asking AI to translate features across fragmented, platform-specific languages, builders can leverage AI to write it once in Dart and instantly deploy it everywhere.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aotSzcGPZg3gYqhwDy4LWQ.png" /><figcaption>Dash secretly hanging out in an alley doing agentive things</figcaption></figure><h3>The existing value proposition</h3><p>Multiplatform development relies on enabling a single, shared source codebase. In our first-party Flutter apps, between 95% and 99% of the source code is shared. This massive code reuse unlocks several benefits:</p><ul><li>Faster time to market across multiple platforms because a team only needs to maintain one codebase.</li><li>Guaranteed consistency across platforms, giving companies a single, consistent feature set to support across all their customers, regardless of their platform of choice.</li><li>Native performance and stability because Flutter code is compiled to each platform’s native machine code.</li><li>Semantic guardrails increase security because the Dart language is strongly typed.</li></ul><h3>The agentic value proposition</h3><p>While LLMs are good at translating requirements into code, using them to build separate native apps for each platform scales poorly. Replicating features across different languages using LLMs multiplies generation time and token usage, and can quickly lead to implementations drifting apart.</p><p>Flutter’s single-source solution eliminates these problems. But beyond just code sharing, Flutter’s specific architecture makes it the ideal framework for agent-driven development. This emerging value proposition is driven by several key advantages:</p><ul><li><strong>Token reduction: </strong>By generating your app once in Dart, you drastically reduce token overhead compared to using AI to translate features across platform-specific languages. This eliminates the need to replicate logic across different codebases, which scales poorly and multiplies token usage.</li><li><strong>Consistency:</strong> Flutter provides a unified experience because a single source codebase ensures the feature set remains identical across all platforms. This prevents platform drift that occurs when LLMs hallucinate and implementations drift apart.</li><li><strong>Self-correcting agents</strong>: Flutter has strong semantic guardrails due to Dart’s strongly typed language, and rich developer tooling. When an AI agent generates code, the strict type system, exposed through flexible tools and MCP servers, acts as an immediate feedback loop to catch errors instantly.</li><li><strong>Predictable code generation</strong>: LLMs excel at generating hierarchical, structured data. Flutter’s compositional, declarative UI aligns with this strength. It is much easier for an agent to reason about and reliably generate a single Dart widget tree than to manage the fragmented logic of other platform-specific frameworks.</li><li><strong>High-speed validation with Hot Reload</strong>: In an agentic workflow, the bottleneck is often verifying the AI’s output. Flutter’s hot reload feature provides a workflow where any change made by the agent is viewable instantly in the running app during development.</li></ul><h3>The Flutter advantage</h3><p>Flutter’s support for a single shared codebase targeting multiple platforms, paired with a strongly typed language and powerful tooling, makes it a great companion to agent-driven development. In summary, the future looks bright! With Flutter, expect your agentically developed apps to result in low token usage, faster multi-platform development cycles, strong semantic guardrails, app consistency across platforms, and native performance. Happy building!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cb5c7da7c2bc" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/flutters-multiplatform-value-for-agentic-development-cb5c7da7c2bc">Flutter’s multiplatform value for agentic development</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[New updates to A2UI and Flutter’s GenUI package]]></title>
            <link>https://blog.flutter.dev/new-updates-to-a2ui-and-flutters-genui-package-e5ddff07737b?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/e5ddff07737b</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[generative-ui]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[generative-ai-tools]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Andrew Brogdon]]></dc:creator>
            <pubDate>Thu, 14 May 2026 14:18:22 GMT</pubDate>
            <atom:updated>2026-05-14T14:18:21.157Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yPatUacknopOAVF_Vr86OA.png" /></figure><p>Generative UI, or GenUI for short, is a user experience pattern in which an agent not only generates content, but also makes decisions about how that content should be displayed and made interactive for the user. For Flutter developers, implementing GenUI means using A2UI, an open protocol that defines a way for agents and clients (or “renderers”) to collaborate on the composition and state of a user interface. To capitalize on this, the Flutter team built genui, a package that uses A2UI to connect with an agent and provide it with a catalog of widgets to use, and then presents those widgets to the user.</p><p>Both the genui package and the A2UI protocol recently got an update!</p><p>The latest release of genui introduces several architectural changes to the framework. Driven by adoption of v0.9 of the A2UI protocol, this update shifts genui from a “Structured Output First” philosophy in which A2UI messages were streamed through structured output APIs to a “Prompt First” approach in which agents include blocks of JSON as text in their responses. It also decouples the architecture, providing more direct control over how your application interacts with Large Language Models (LLMs).</p><p>If you are migrating an app from v0.7.0 to v0.9.0 of the genui package, this guide covers the necessary steps, from dependency cleanup to wiring up your new chat loops.</p><h3>Architecture decoupling</h3><p>In previous versions, GenUI relied on a series of classes based on ContentGenerator. These classes hid the details of prompt construction, LLM network calls, and response parsing.</p><p>The latest version of package:genui removes ContentGenerator. Instead, the framework is now split into distinct layers:</p><ul><li><strong>Engine</strong> (SurfaceController): Manages the state and rendering of your UI.</li><li><strong>Transport (</strong>A2uiTransportAdapter<strong>)</strong>: Streams messages between the agent and renderer.</li><li><strong>Facade</strong> (Conversation): Provides a high-level API for managing chat states.</li></ul><p>This decoupling means you have control over chat history, retry logic, and error handling. It also means you can set up your connection to your LLM however you’d like. The framework no longer “wraps” your agent with a ContentGenerator, so you’re free to use the model and provider you’d prefer, tweak generation settings, add your own functions, and so on, without needing to go through the framework’s API to do so.</p><p>Because the ContentGenerator is gone, the provider-specific wrapper packages are no longer needed. If you pull the latest version of the package, you’ll see that names like genui_dartantic, genui_google_generative_ai, and genui_firebase_ai no longer appear in the tree.</p><p>This is the most significant code change in the migration. Instead of passing a ContentGenerator to your SurfaceController, your app is responsible for setting up a connection to an agent and passing messages back and forth through a TransportAdapter.</p><p><strong>The old way:</strong></p><pre>// Create a ContentGenerator that encapsulates interaction with<br>// the agent.<br>final generator = FirebaseAiContentGenerator(<br>  catalog: CoreCatalogItems.asCatalog(),<br>  systemInstruction: &#39;You are a helpful assistant.&#39;,<br>);<br><br>// Create a conversation that links the generator with a GenUiManager<br>// that manages surfaces, updates, and so on.<br>final conversation = GenUiConversation(<br>  genUiManager: GenUiManager(catalog: catalog),<br>  contentGenerator: generator,<br>);</pre><p><strong>The new way:</strong></p><pre>final catalog = BasicCatalogItems.asCatalog();<br><br>// Create a SurfaceController to manage the state of generated surfaces.<br>final surfaceController = SurfaceController(catalogs: [catalog]);<br><br>// Created a transport adapter that routes messages from the `genui` library<br>// to the agent, then feeds responses back into the adapter via `addChunk`.<br>late final adapter = A2uiTransportAdapter(<br>  onSend: (ChatMessage msg) async {<br>    // Use a string buffer to prepare tokens to send to the agent.<br>    final buffer = StringBuffer();<br><br>    // Iterate over the messages created by the `genui` package, and<br>    // add them as tokens to the buffer.<br>    for (final part in msg.parts) {<br>      if (part.isUiInteractionPart) {<br>        buffer.write(part.asUiInteractionPart!.interaction);<br>      } else if (part is genui.TextPart) {<br>        buffer.write(part.text);<br>      }<br>    }<br><br>    // Send a content generation request to the agent, including the<br>    // string-ified messages from `genui`<br>    final response = await myAgentClient.sendRequest(buffer.toString());<br><br>    // After receiving the agent&#39;s response, add it to the `genui` package&#39;s<br>    // input stream using `addChunk`, where it will be parsed for A2UI<br>    // messages.<br>    adapter.addChunk(response);<br>  },<br>);</pre><p>You might look at those two examples and think, “Wait, shouldn’t API improvements mean I have to write <em>less</em> code rather than more?” It’s true that previously this bit of “wiring” code for connecting with the agent was included in the genui package, tucked away in a ContentGenerator class, but the new approach has some concrete advantages:</p><ul><li>Without the requirement of a ContentGenerator, you can set your agent up the way you like, hold it in memory where you prefer, and manage its lifecycle. You can also use nearly any AI source you’d like without waiting for a package update with a new ContentGenerator.</li><li>You no longer have to “inject” your connection to the agent into the genui API. They’re loosely coupled, with just tokens moving back and forth.</li><li>Testing is simpler. genui accepts tokens directly, and they can come from an agent, or a mock agent, or a hard-coded test.</li><li>If you’d like to encapsulate your connection into a class, you can still do so. In fact, several of <a href="https://github.com/flutter/genui/tree/main/examples">the examples</a> for genui take this approach.</li></ul><h3>Going prompt first</h3><p>In previous versions, the genui package relied heavily on the LLM provider’s strict API-level constraints (like “JSON Mode” or complex function-calling definitions) to force the model to output valid UI structures. The schema was passed to the LLM out-of-band through specific API parameters, and the LLM was effectively locked into a rigid structure.</p><p>While this directed models to create predictable, well-formatted JSON, deeply nested schemas could sometimes confuse models or fight against their natural text-generation tendencies. Plus, reliance on structured outputs imposed limits on the overall size and complexity of the catalog. It also made debugging harder because the constraints lived entirely in the network layer rather than in plain text that you could easily read and tweak.</p><p>The “prompt first” approach shifts the source of truth back to where LLMs excel: system instructions. Instead of relying entirely on strict API toggles, the UI schema and instructions relating to A2UI are injected directly into the LLM’s system prompt as plain text. The LLM reads the instructions, detailing exactly how to construct messages for the client.</p><p>This approach has a few advantages. First, modern LLMs are highly optimized to follow detailed system instructions and examples. Providing the schema in the prompt aligns with how they “think.” In addition, because the UI schema is now just plain text in your prompt, you have the ability to change it to suit your application.</p><p>This change means responsibility for getting the right prompt into the agent’s context window now rests with your app. Fortunately, the genui package provides a new tool to help you craft the right system prompt for your application, PromptBuilder. Given a catalog and any additional instructions you’d like to provide, PromptBuilder will create a system prompt that includes the schema definitions and rules that your LLM needs to format A2UI messages correctly.</p><pre>final promptBuilder = PromptBuilder.chat(<br>  catalog: catalog,<br>  systemPromptFragments: [&#39;You are a helpful assistant.&#39;],<br>);</pre><p>Once set up, your app can retrieve a String version of the prompt using promptBuilder.systemPrompt, and then pass that value to the LLM.</p><h3>Protocol &amp; schema adjustments</h3><p>If your code manually constructs A2UI JSON or relies on specific payload structures, note these breaking changes from the A2UI v0.9 update:</p><ul><li><strong>Surface creation:</strong> beginRendering is now createSurface.</li><li><strong>Flat component definitions:</strong> Instead of nested keys (such as {“Text”: {“text”: “Hello”}}), components now use a flat discriminator: {“component”: “Text”, “text”: “Hello”}.</li><li><strong>Data binding:</strong> Bindings are simplified. Use { “path”: “/path/to/var” } for path resolution.</li></ul><p><strong>Property renames:</strong></p><ul><li>distribution =&gt; justify</li><li>alignment =&gt; align</li><li>usageHint =&gt; variant</li><li>text (in TextField) =&gt; value</li><li>userAction =&gt; action</li></ul><h3>Other stuff got renamed!</h3><p>Along with some other small tweaks, the GenUi prefix has been dropped from almost all core classes:</p><ul><li>GenUiConversation =&gt; Conversation</li><li>GenUiController =&gt; SurfaceController</li><li>GenUiSurface =&gt; Surface</li><li>GenUiHost =&gt; SurfaceHost</li><li>GenUiContext =&gt; SurfaceContext</li><li>GenUiTransport =&gt; Transport</li><li>GenUiFallback =&gt; FallbackWidget</li></ul><p>In addition, CoreCatalogItems was renamed to BasicCatalogItems to clarify that it serves as a baseline implementation rather than a strict requirement.</p><p>Finally, to align with standard LLM function-calling terminology, GenUiFunctionDeclaration and references to “tools” have been renamed to ClientFunction.</p><h3>The new genai_primitives package</h3><p>The genui package no longer ships with its own messaging types. Instead, the GenUI team created the new genai_primitives package with primitive types for common functionality needed by GenAI applications. This package includes types like ChatMessage, MessagePart, and ToolDefinition.</p><p>These new types are used across the genui package API, and they’re flexible enough to fit into other GenAI applications or packages you might be working on.</p><h3>And there’s more!</h3><p>In addition to the above, the latest version of A2UI and the genui package bring several new features like:</p><ul><li><a href="https://a2ui.org/specification/v0_9/docs/a2ui_custom_functions/">Custom functions</a>, useful for validating data on the client</li><li>A new, modular schema</li><li>Improved error handling</li></ul><p>For more information on these, check out the <a href="https://developers.googleblog.com/a2ui-v0-9-generative-ui/">v0.9 announcement blog post</a> and head to <a href="https://a2ui.org">a2ui.org</a>.</p><h3>Summary</h3><p>The latest update to genui introduces an architecture that is much more idiomatic, flexible, and robust. If you haven’t yet started using GenUI, there’s no better time than now! Head to our <a href="https://codelabs.developers.google.com/codelabs/genui-intro#0">introductory codelab</a> to gain a hands-on understanding of the tech and create a working app in about 90 minutes.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e5ddff07737b" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/new-updates-to-a2ui-and-flutters-genui-package-e5ddff07737b">New updates to A2UI and Flutter’s GenUI package</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing Skills for Dart and Flutter]]></title>
            <link>https://blog.flutter.dev/introducing-skills-for-dart-and-flutter-23837c6ec0ae?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/23837c6ec0ae</guid>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Mariam Hasnany]]></dc:creator>
            <pubDate>Wed, 06 May 2026 18:19:09 GMT</pubDate>
            <atom:updated>2026-05-06T18:29:38.719Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-cp6K90CIG7efKBLyiZ_jw.gif" /><figcaption>Introducing prepackaged Dart and Flutter Skills!</figcaption></figure><h4>Improving AI with domain expertise</h4><p>AI agents are generalists, but when it comes to professional Flutter development, “general” isn’t enough. To build production-grade apps, you need an assistant that understands the nuance of localization, the latest Dart language features, and how to add integration tests.</p><p>Today, we’re introducing <strong>Agent Skills</strong> for Flutter and Dart — a new way to give your AI tools domain-specific expertise.</p><h3>Beyond the knowledge gap</h3><p>One of the primary challenges in AI development is the “knowledge gap.” Flutter and Dart can launch new features more quickly than LLMs can update their fixed training data. As a part of <a href="https://medium.com/flutter/how-dart-and-flutter-are-thinking-about-ai-in-2026-e2fd64e1fdd0">how we are thinking about AI</a>, we are looking for ways to not only address the knowledge gap but also ensure the agent applies that knowledge to achieve the task accurately and efficiently following the most optimal workflows.</p><p>A little over a year ago, Model Context Protocols (MCP) were the way to provide more AI domain-specific expertise. While MCP gives an agent access to specialized tools, an Agent Skill teaches the agent <em>how</em> to use those tools for a specific task. Think of it this way: MCP provides the hammer and nails (the tools), while a Skill provides the blueprint and the professional know-how to build the house.</p><p>Skills improve context efficiency through “progressive disclosure”. This is similar to how deferred loading works in Flutter, where apps can load libraries when needed, coding agents load Skills when they are relevant to what you’re trying to do .</p><p>For Flutter and Dart, these Skills provide tailored instructions for common workflows, and enhance the tools provided in the Dart MCP server to reduce the knowledge gap, which improves accuracy and lowers token usage.</p><h3>A task-oriented approach</h3><p>Our early experimentation revealed that Skills that only provide documentation don’t add as much value as we initially assumed. Since Flutter’s comprehensive and well written documentation is open-sourced, modern models are already highly capable of finding relevant information for most questions and tasks.</p><p>So, we pivoted to creating Skills that are “task-oriented”. Every skill in our GitHub <a href="https://github.com/flutter/skills">Flutter Skills</a> or <a href="https://github.com/dart-lang/skills">Dart Skills</a> repositories focuses on developer tasks like building adaptive layouts- by providing instructions for agents to reliably complete the task. We have conducted extensive manual evaluations to define our initial set of launched skills, and are working on an automated evaluation pipeline that we will share soon.</p><h3>Using the Skills</h3><p>To start using these Skills in your workflow, first install the Skill set in your project directory:</p><pre>npx skills add flutter/skills - skill &#39;*&#39; - agent universal<br>npx skills add dart-lang/skills - skill &#39;*&#39; - agent universal</pre><p>You will be asked to select the Skills you want to install. Pick all or select the specific ones you might find most useful.</p><p>Then choose the agent that you prefer to develop with.</p><p>Now, prompt your AI agent as usual. Here are 5 ways you can use these Skills today:</p><p><strong>Skill #1</strong>: flutter-add-integration-test</p><p>Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests.</p><pre>Add an integration test for the checkout flow in my app</pre><p><strong>Skill #2</strong>: flutter-setup-localiztion</p><p>Adds localization support to your Flutter project</p><pre>Set up localization in my app</pre><p><strong>Skill #3</strong>: flutter-build-responsive-layout</p><p>Uses LayoutBuilder, MediaQuery, or Expanded/Flexible to create a layout that adapts to different screen sizes.</p><pre>Ensure that the checkout screen uses repsonsive layout</pre><p><strong>Skill #4</strong>: dart-use-pattern-matching</p><p>Refactors code to use Dart’s pattern matching language capabilities where appropriate</p><pre>Refactor my code so that it uses pattern matching where possible</pre><p><strong>Skill #5</strong>: dart-collect-coverage</p><p>Uses the coverage package to collect unit test coverage and generate an LCOV report.</p><pre>Collect test coverage for my project</pre><p>For more prompt examples, check out the readme <a href="https://github.com/flutter/skills">Flutter Skills</a> or <a href="https://github.com/dart-lang/skills">Dart Skills</a> repositories on GitHub.</p><h3>Tell us what you think</h3><p>These initial core Skills, designed to handle the most common Flutter development hurdles, are just the beginning. We want to build the future of AI-assisted development with you, our community. As you use these Skills and create new ones for your projects, file issues (<a href="https://github.com/dart-lang/skills/issues">Dart Skills repo</a>, <a href="https://github.com/flutter/skills/issues">Flutter Skills repo</a>), and let us know what additional work you’d like to see. We look forward to helping improve your productivity as you use these Skills!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=23837c6ec0ae" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/introducing-skills-for-dart-and-flutter-23837c6ec0ae">Introducing Skills for Dart and Flutter</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Saying goodbye to CocoaPods: Swift Package Manager is soon the default in Flutter!]]></title>
            <link>https://blog.flutter.dev/saying-goodbye-to-cocoapods-swift-package-manager-is-soon-the-default-in-flutter-645a92714a57?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/645a92714a57</guid>
            <category><![CDATA[cocoapods]]></category>
            <category><![CDATA[swift-package-manager]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <dc:creator><![CDATA[Jenn Magder]]></dc:creator>
            <pubDate>Thu, 30 Apr 2026 15:57:00 GMT</pubDate>
            <atom:updated>2026-04-30T21:31:50.982Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2A_CUygcOEFYUv5ms5KAJw.gif" /><figcaption>Dash migration!</figcaption></figure><p>Starting with the next stable Flutter release, 3.44, Swift Package Manager (SwiftPM) replaces CocoaPods as the default dependency manager for iOS and macOS apps. <em>This means no more messing around with Ruby or CocoaPods installations just to get your app running!</em></p><p>CocoaPods is officially in maintenance mode, and its registry will permanently <a href="https://blog.cocoapods.org/CocoaPods-Specs-Repo/">become read-only on December 2, 2026</a>. While existing builds will still work, no new versions or pods will be added to the trunk after this date. To ensure that your apps continue receiving dependency updates and to provide access to the Swift package ecosystem, Flutter is transitioning to Apple’s supported dependency management solution: Swift Package Manager.</p><p><strong>If you’ve already migrated your plugin(s) to use SwiftPM, read the “Plugin developers” section below for new migration requirements.</strong></p><p>Here is how to manage the transition.</p><h3>App developers</h3><p>For app developers, the Flutter CLI handles the migration. When you run or build your iOS or macOS app, the CLI automatically updates your Xcode project to use Swift Package Manager. Check out the <a href="https://docs.flutter.dev/packages-and-plugins/swift-package-manager/for-app-developers">Flutter migration docs for app developers</a> for more details.</p><p>If your app relies on plugins that haven’t adopted Swift Package Manager yet, Flutter will print a warning listing exactly which of your dependencies are unsupported. Flutter will temporarily fall back to CocoaPods for plugins that have not adopted Swift packages yet. Because CocoaPods support will eventually be removed entirely, if a plugin hasn’t updated and breaks your build, file an issue with the dependency’s maintainer to request Swift package support or find an alternative package.</p><p>We know that migrations can sometimes hit a snag. If SwiftPM causes a breaking issue, you can temporarily disable it for your project. Open your pubspec.yaml file, navigate to the flutter section, and set enable-swift-package-manager to false under the config block:</p><pre>flutter:<br>  config:<br>    enable-swift-package-manager: false</pre><p>If you opt out, please file a bug report using the <a href="https://github.com/flutter/flutter/issues/new/choose">Flutter GitHub issue template</a> and let us know! Include the error details, a list of your plugins and versions, and copies of your Xcode project files to help us resolve the issue before CocoaPods is completely removed.</p><h3>Plugin developers</h3><p>For plugin authors who maintain an iOS or macOS plugin, <em>you must add Swift Package Manager support if you haven’t already</em>. So far, 61% of the top 100 iOS plugins have migrated. We need the remaining plugins on board so app developers aren’t stuck relying on a deprecated tool. To encourage adoption, packages without Swift Package Manager support now receive lower pub.dev scores until they migrate.</p><p>To add this support, add a Package.swift file and move your source files to match the standard Swift package structure. If you already migrated your plugin during the 2025 pilot, you need to complete one new step: you must add FlutterFramework as a dependency in your Package.swift file. Read the <a href="https://docs.flutter.dev/packages-and-plugins/swift-package-manager/for-plugin-authors">Flutter migration docs for plugin authors</a> for full instructions.</p><p>Thank you for helping with this migration to Swift Package Manager. We hope this simplifies and improves your development experience on iOS and macOS!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=645a92714a57" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/saying-goodbye-to-cocoapods-swift-package-manager-is-soon-the-default-in-flutter-645a92714a57">Saying goodbye to CocoaPods: Swift Package Manager is soon the default in Flutter!</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[That’s a wrap: Everything Flutter at Google Cloud Next]]></title>
            <link>https://blog.flutter.dev/thats-a-wrap-everything-flutter-at-google-cloud-next-1f4d3c6c6a6e?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/1f4d3c6c6a6e</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[mobile]]></category>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Emma Twersky]]></dc:creator>
            <pubDate>Mon, 27 Apr 2026 19:19:56 GMT</pubDate>
            <atom:updated>2026-04-28T14:29:19.210Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MdrcuqmMZPxXdrkJbDAdIA.png" /><figcaption>Google Cloud Next Recap 2026</figcaption></figure><p>Our team has been hard at work this Spring, preparing to meet over 30,000 of you in Las Vegas for Google Cloud Next. For those who couldn’t make it in-person, here is a breakdown of the major highlights, announcements, and experiences from the Flutter and Dart team.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cIHVKHTVvRkPEiualLOXeQ.jpeg" /><figcaption>Dash team at Google Cloud Next 2026</figcaption></figure><h3>Big announcements</h3><ul><li><strong>Full-stack Dart:</strong> The team announced a preview of Dart support for <a href="https://firebase.google.com/docs/functions/start-dart">Firebase Functions</a>. Yep, that’s right: experience using Dart for both your frontend and backend. We also introduced deeper integrations with <strong>Firebase using the Dart Admin SDK</strong> to reduce context switching and improve development velocity.<br>Check out the announcement blog, and documentation, and stay tuned for a full breakout session all about this feature at Google I/O.</li></ul><h3>Onsite experiences</h3><ul><li><strong>GenLatte:</strong> We built an AI-powered specialty coffee shop in the center of Next, created with <a href="https://docs.flutter.dev/ai/genui"><strong>Flutter GenUI</strong></a>. Attendees ordered drinks using a GenUI Flutter app, then watched baristas make a latte and print a custom nanobanana-generated image on the foam.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HIkUhLDGGJknOoFb8AC2GQ.jpeg" /><figcaption>The GenLatte booth</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TIrEkPNew4nRhnOX_JZeKw.png" /><figcaption>Use a Flutter app to order a latte with custom foam art!</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*75RjqqMruwwRcwQVWjkmcQ.jpeg" /><figcaption>Attendees enjoying their custom lattes</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*s757IVhn5sGl8hKwxtVl7A.jpeg" /><figcaption>Kate Lovett helps Dash fulfill her latte needs</figcaption></figure><ul><li><strong>Agentic mobile &amp; web demos galore: </strong>The expo floor was packed with energy, including three Dart and Flutter demos, showcasing Fullstack Dart, GenUI, and a special appearance by our friends over at <a href="https://verygood.ventures/">VGV</a>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8tCVXW_vMObZzebVQdU96g.jpeg" /><figcaption>Answering questions about GenUI</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g7pI_LsKz7SMDpaDrsw1GA.jpeg" /><figcaption>Demoing Firebase Functions for Dart</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*ftJN2u294p-nycRBfkwigQ.gif" /><figcaption>The Partiful app— the UI you see is generated on the fly</figcaption></figure><ul><li><strong>The Builder hub:</strong> This served as the “home base” for the developer community on the Expo floor. It featured dedicated booths for <strong>Flutter </strong>and our friends at Firebase and Go, providing a space for developers to connect with experts and explore new tools.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g7OlGkj6nfHBCjiX3MNFDA.png" /><figcaption>The Builder Hub where developers can greet, meet, and repeat</figcaption></figure><h3>Key sessions &amp; customer stories</h3><ul><li><strong>Developer keynote:</strong> Emma Twersky hosted the Developer keynote, showcasing how Flutter is part of Google Cloud’s big bet on the future of agents.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FOxGHPVfUKaibqcK0FSO2g.jpeg" /><figcaption>Richard Seroter and Emma Twersky giving the Developer Keynote</figcaption></figure><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FA01DQ8_xy7Q%3Fstart%3D1%26feature%3Doembed%26start%3D1&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DA01DQ8_xy7Q&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FA01DQ8_xy7Q%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/85aefcccc27b533ca85c3e6e9f9fe819/href">https://medium.com/media/85aefcccc27b533ca85c3e6e9f9fe819/href</a></iframe><ul><li><strong>Toyota &amp; Talabat:</strong> Real-world enterprise success was a major theme. Abdallah Shaban took the stage alongside industry leaders to showcase how Flutter is transforming their core products. <a href="https://www.youtube.com/watch?v=A3ApoV_QRio">Toyota shared how they are revolutionizing automotive UX using Flutter</a> for their next-generation infotainment systems, while <a href="https://www.youtube.com/watch?v=A3ApoV_QRio">Talabat demonstrated how they innovate faster and scale across the Middle East</a> using the framework.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z5ZnnwJZgPjU71ahEdXKMg.png" /><figcaption>Toyota session</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JTvcXKm4OadZ9FjHAyjAzg.jpeg" /><figcaption>Talabat session</figcaption></figure><ul><li><strong>Generative UI Deep Dive:</strong> Yegor Jbanov and Andrew Brogdon led a session on how to move beyond text-based chatbots by giving your agents the power to create their own UI.<br>Stay tuned for Google I/O where this session will be available world wide on the Flutter YouTube channel.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mH5YXCtec8kz7iNQhNnnQQ.jpeg" /><figcaption>GenUI session</figcaption></figure><ul><li><strong>Building full-stack Dart: </strong>Rody Davis and Kevin Moore shared why you should be excited about today’s biggest announcement for Dart.<br>Stay tuned for Google I/O where this session will be available world wide on the Flutter YouTube channel.</li></ul><h3>Our community is thriving</h3><ul><li><strong>GDE Summit:</strong> Held just before the main event, this summit brought together over <strong>350 global Google Developer Experts (GDEs)</strong> to share feedback on Flutter with the core team, including a main stage session on Flutter GenUI.</li><li><strong>Developer meetups:</strong> Throughout the week, the <strong>Expo Meetup Hub</strong> hosted informal gatherings. Flutter helped host the Mobile Developers meetup, and we had a blast meeting community members from around the world and sharing why we think Flutter is the best way to build.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qbiAd4dCqHePwPdD8nUf4g.jpeg" /><figcaption>Developer meetups at Cloud Next</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*B4G1_W-d0YsF_MWmqE6AvQ.jpeg" /><figcaption>Firebase meetup at Google Cloud Next</figcaption></figure><p>And that’s a wrap! But not for long… <a href="https://io.google/2026/">Register today for Google I/O 2026</a> where our team has even more planned. We can’t wait to surprise you. 😉</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9XMAAu_JYPQswvTcMRhNiQ.jpeg" /><figcaption>See you at Google I/O!</figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1f4d3c6c6a6e" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/thats-a-wrap-everything-flutter-at-google-cloud-next-1f4d3c6c6a6e">That’s a wrap: Everything Flutter at Google Cloud Next</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[We rebuilt Flutter’s websites with Dart and Jaspr]]></title>
            <link>https://blog.flutter.dev/we-rebuilt-flutters-websites-with-dart-and-jaspr-317c00e8b400?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/317c00e8b400</guid>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[static-site-generator]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[jaspr]]></category>
            <dc:creator><![CDATA[Parker Lougheed]]></dc:creator>
            <pubDate>Wed, 15 Apr 2026 18:31:01 GMT</pubDate>
            <atom:updated>2026-04-15T19:05:46.638Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Dash and Jasper sitting behind a laptop, checking out the new Dart and Flutter websites built with Dart and Jaspr, with a mockup of a website layout behind them." src="https://cdn-images-1.medium.com/max/1024/1*y6lc2WLpxXBKsuoKJywapQ.png" /><figcaption>Rebuilding three websites using Jaspr, a Dart-based, open-source web framework.</figcaption></figure><p>Despite Dart starting out as a web language and being used every day to build apps across platforms, including the web, our own websites (<a href="https://dart.dev">dart.dev</a>, <a href="https://flutter.dev">flutter.dev</a>, <a href="https://docs.flutter.dev">docs.flutter.dev</a>) relied on a fragmented mix of non-Dart tools. That’s finally changed. We’ve migrated all three websites to use <a href="https://jaspr.site/">Jaspr</a>, an open-source framework for building websites with Dart.</p><p>The result is a unified stack with a consistent developer experience where contributing only requires Dart. If you’re curious about building web experiences with Dart beyond standard Flutter web apps, this post explores what motivated our migration and how Dart and Jaspr made it all possible.</p><h3>A fragmented and unfamiliar technical stack</h3><p>While the previous setup of our sites worked, their implementations were fragmented, and required increasingly more effort to update the sites to meet our evolving needs. The documentation sites were built with <a href="https://www.11ty.dev/">Eleventy</a>, a Node.js static-site generator. Meanwhile, flutter.dev had a completely separate setup, powered by <a href="https://wagtail.org/">Wagtail</a>, a CMS built on Python and Django.</p><p>This fragmentation meant that anyone wanting to contribute to or maintain our sites needed additional experience and tooling outside the Dart ecosystem: Node.js tooling for one set of sites, Python for another. While some surrounding infrastructure and interactive components were already built with Dart, the separate ecosystems limited code sharing, significantly increased set-up and contribution friction, and grew increasingly complicated.</p><p>We wanted to change that. We wanted a single, unified stack built on the language and tools our team and community already know. We also had growing ambitions and needs for interactivity on our sites, from richer code samples to quizzes for tutorials. Our existing setups made each new interactive element an uphill battle, often requiring one-off imperative DOM logic.</p><h3>Finding a unified solution in Jaspr</h3><p>Jaspr is a versatile Dart web framework that supports client-side rendering, server-side rendering, and static site generation. Beyond being a traditional DOM-based (with HTML and CSS) web framework and being written in the language we already know, Jaspr stood out for a few reasons:</p><p><strong>Flutter skills transfer directly.</strong> The Jaspr framework and its component model were designed to feel natural and familiar to any Flutter developer while being compatible with the DOM model of the web. If you’ve written a Flutter widget before, you can read this:</p><pre>class FeatureCard extends StatelessComponent {<br>  const FeatureCard({<br>    required this.title,<br>    required this.description,<br>    super.key,<br>  });<br><br>  final String title;<br>  final String description;<br><br>  @override<br>  Component build(BuildContext context) {<br>    return div(classes: &#39;feature-card&#39;, [<br>      h3([.text(title)]),<br>      p([.text(description)]),<br>    ]);<br>  }<br>}</pre><p>With Jaspr, contributors can directly apply the Dart and Flutter experience they already have to a new platform, significantly lowering the barrier to entry for team and community members who want to improve our documentation and websites.</p><p><strong>Seamless support for partial hydration.</strong> One major underlying reason for this exploration and migration was to make it easier to build and integrate interactive experiences on our sites. Jaspr’s built-in support for partial hydration allows each page to be prerendered as static HTML, then the client-side logic is attached only for the components that need it. This is perfect for websites like ours, where the majority of the content is static and only small pockets of interactivity are needed, ensuring quick page loading and good SEO.</p><p><strong>Jaspr Content for Markdown-driven sites.</strong> Jaspr also provides <a href="https://docs.jaspr.site/content">Jaspr Content</a>, a package that supports quickly building content-driven sites. It provides enough out-of-the-box functionality to create a running Markdown-based website in just a few minutes while also being easy to expand and customize extensively. This built-in functionality saved a significant amount of time while the customizability enabled us to keep our original functionality and content practices intact.</p><h3>What we gained</h3><p>The migration brought all the benefits we imagined and more, both for the sites themselves and the contribution experience.</p><p><strong>A singular, unified toolchain.</strong> With everything written in Dart, not only do you need just one SDK to contribute, we also gained access to Dart’s powerful, unified tooling. We can manage all dependencies with dart pub, format code with dart format, analyze it with dart analyze, and then test it with dart test. Managing the site now requires only one set of tools to know, one set of conventions to follow, and one ecosystem to stay current with, and it’s the one we’re already most familiar with.</p><p><strong>A stack our contributors already know.</strong> Our websites have a lot of contributors, from engineers, to technical writers, to passionate community members. We want everyone to be able to contribute, but the fragmented setup was complex and unfamiliar to most. Now the sites are implemented as standard Dart projects, and if you know Dart, you have everything you need. We hope this lowers the barrier for team and community members who want to help improve Flutter and Dart’s documentation.</p><p><strong>Less had to change than you’d expect.</strong> With Jaspr Content supporting most of what we needed out of the box, such as templating support, Markdown, and data loading, our content and writing workflows barely needed to change. Nor did our styles, as we already used <a href="https://sass-lang.com/">Sass</a>, a CSS extension language, which is actually implemented in Dart, and therefore requires an even simpler setup than we had before.</p><h3>The collaborative migration</h3><p>Overall, the site migration to Jaspr and Jaspr Content went well, but there were, of course, some challenges along the way. We occasionally ran into issues as well as opportunities for improvement with both Dart’s web tooling and Jaspr itself.</p><p>What made the migration possible was <a href="https://github.com/schultek">Kilian</a>, Jaspr’s creator and maintainer. Beyond creating Jaspr, he supported us throughout the migration. He migrated components as early proofs of concept, responded to issues, shipped fixes, improved the developer experience, and even built out Jaspr Content with our websites as a driving use case. To support this ongoing effort and formalize the collaboration, we partnered with Kilian and his consultancy, <a href="https://www.netlight.com/">Netlight</a>, to help us migrate the rest of our web presence and continue investing directly in Jaspr. It was a genuinely collaborative process. Our sites and Jaspr both grew as a result.</p><p>In the Dart and Flutter ecosystem, <strong>the community is everything</strong> and what Kilian has provided to the community with Jaspr is a great example of that. Jaspr has shown itself to be a powerful and modern web framework that is well maintained, responsive to feedback, and ready for you to try out. Thank you, Kilian!</p><p>To hear Kilian’s perspective on building and maintaining the framework, check out his article: Jaspr: <a href="https://opensource.googleblog.com/2026/04/jaspr-why-web-development-in-dart-might-just-be-a-good-idea.html">Why web development in Dart might just be a good idea</a>.</p><h3>Dart and Jaspr growing together</h3><p>One of the most rewarding aspects of building on an all-Dart stack is that improvements to the Dart language and surrounding tooling benefit everything. Not just your Flutter apps, but your websites too. Here are a few recent Dart features that have directly impacted and improved the experience of building with Jaspr.</p><p><strong>Dot shorthands make component trees cleaner.</strong> Dart 3.10 introduced support for a <a href="https://dart.dev/language/dot-shorthands">dot shorthand syntax</a> enabling you to omit the type name from static member accesses when they can be inferred from the context. Kilian took advantage of this by consolidating several component constructors onto the Component class and designing them to work naturally with the new syntax:</p><pre>Component build(BuildContext context) =&gt; const div([<br>  // After the API changes:<br>  h1([Component.text(&#39;Dash says hi!&#39;)]),<br>  Component.fragment([<br>    Component.text(&#39;First element&#39;),<br>    Component.text(&#39;Second element&#39;),<br>  ]),<br>  Component.empty(),<br><br>  // With dot shorthands:<br>  h1([.text(&#39;Dash says hi!&#39;)]),<br>  .fragment([<br>    .text(&#39;First element&#39;),<br>    .text(&#39;Second element&#39;),<br>  ]),<br>  .empty(),<br>]);</pre><p>The result was a more consistent API with better discoverability and a concise syntax that still works in constant contexts. Best of all, Jaspr’s CLI comes with a jaspr migrate command that automatically handled the migration to the new API as well as other changes.</p><p><strong>Null-aware collection elements simplify conditional rendering.</strong> Dart 3.8 added support for <a href="https://dart.dev/language/collections#null-aware-element">null-aware collection elements</a>, providing a clean syntax to conditionally include non-null values in collections. In Jaspr code, where you’re regularly composing lists of child components, they offer an elegant way to handle conditional UI elements:</p><pre>Component build(BuildContext context) =&gt; div(classes: &#39;header&#39;, [<br>  h1([.text(&#39;Welcome to Flutter!&#39;)]),<br><br>  // Before null-aware collection elements:<br>  if (eventBanner != null) eventBanner!,<br><br>  // With a null-aware collection element:<br>  ?eventBanner,<br>]);</pre><p>No more verbose if checks and not-null assertions cluttering your component trees.</p><p><strong>Modern, lightweight JS interop and compilation to WebAssembly.</strong> To enable efficient access to modern web APIs and compilation to WebAssembly, Dart 3.3 introduced new <a href="https://dart.dev/interop/js-interop">JS interop</a> libraries as well as package:web. Jaspr was quick to migrate to and support the new APIs, ensuring Jaspr developers could benefit from their new capabilities and build modern Dart apps. Building on this, Jaspr additionally supports experimental compilation to WebAssembly when running on the client. In fact, dart.dev already uses and benefits from this support on compatible browsers.</p><p><strong>A helpful, integrated analyzer plugin.</strong> For a while, Jaspr had a helpful linting package built on top of package:custom_lint, helping developers write idiomatic and correct Jaspr code. With the release of official <a href="https://dart.dev/tools/analyzer-plugins">analyzer plugin</a> support in Dart 3.10, Jaspr migrated to adopt the feature. The plugin provides a great example of what is possible, providing Jaspr-specific diagnostics and code assists. For example, it can convert between component types or quickly wrap a component with another, similar to the assists you might already be used to with Flutter.</p><p>None of these features were built specifically for Jaspr. They’re improvements to the Dart language and tooling that benefit the entire ecosystem, not just Flutter. For some of them, Jaspr was able to immediately take advantage, while others required framework changes from Kilian and contributors to unlock their potential. Either way, it’s clear that Dart keeps evolving and that evolution continues to open up improvements and possibilities for everything built with it, including Jaspr and Flutter.</p><h3>What’s next and how to get started</h3><p>We’re not done yet. Now that our websites share this new technical stack, we can start to share more code, build new interactive features, and continue to improve Dart’s web development story. We’re also migrating the Dart and Flutter blogs from Medium to being directly hosted on our Jaspr-powered sites. You’ll hopefully be able to read this very post there soon.</p><p>If you’re a Dart or Flutter developer curious about building websites with the skills you already have, there’s never been a better time to try. Jaspr is a great option for content-heavy sites, such as landing pages and documentation. It can even naturally <a href="https://docs.jaspr.site/going_further/flutter_embedding">integrate with your Flutter web apps</a>. Try it out now on Jaspr’s <a href="https://playground.jaspr.site/">online playground</a> (which is also built with Jaspr!) or by following the <a href="https://docs.jaspr.site/quick_start">Jaspr quickstart</a>.</p><p>Or, if you’re interested in contributing to the <a href="https://github.com/flutter/website">Flutter</a> or <a href="https://github.com/dart-lang/site-www">Dart</a> documentation sites, the barrier to entry just got a lot lower. Now with Jaspr, <strong>all you need is Dart</strong>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=317c00e8b400" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/we-rebuilt-flutters-websites-with-dart-and-jaspr-317c00e8b400">We rebuilt Flutter’s websites with Dart and Jaspr</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Come meet the Flutter core team on tour in 2026]]></title>
            <link>https://blog.flutter.dev/come-meet-the-flutter-core-team-on-tour-in-2026-51c3d7190e44?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/51c3d7190e44</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[mobile]]></category>
            <dc:creator><![CDATA[Emma Twersky]]></dc:creator>
            <pubDate>Tue, 14 Apr 2026 01:18:57 GMT</pubDate>
            <atom:updated>2026-04-14T01:46:42.645Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UVUiBS4ceEJmWIt8w8IeTQ.png" /><figcaption>Upcoming events where you can meet members of the Flutter team</figcaption></figure><p>The Flutter team has been hard at work preparing for Google Cloud Next and Google I/O this Spring. I strongly believe in the power of community, whether digital and online, or in-person and interactive. For Flutter, that means a truly global community and hundreds of thousands of developers around the world. Some of the most impactful moments of my career have come from those — community thrives in community-led events.</p><p>As we kick off our year and the upcoming release of Dart 3.12 and Flutter 3.44, the Flutter team is setting out to meet as many of you as possible, around the globe. Our mission is to build the most productive app framework and language for high-performance, full-stack, multi-platform applications and ephemeral experiences. And doing that means hearing from you.</p><p>To be transparent and open, we’ve updated <a href="https://flutter.dev/events">the list of events</a> where our team will be present, or we have sponsored the presence of our Google Developer Experts. Our developer relations team is constantly engaging with developers, founders, enterprises, and builders by organizing: customer and partner advisory boards, our <a href="https://flutter.dev/community">meetup organizer network</a>, <a href="https://flutter.dev/community">Flutteristas</a>, <a href="https://flutter.dev/consultants">the Flutter consultants program</a>, <a href="https://flutter.dev/community">Google Developer Experts</a>, and <a href="https://developers.google.com/community">Google Developer Group organizers</a>.</p><p>If you’ve been looking for an opportunity to connect with the team, see a live demo, or give us feedback in person, you can find us at the following events for the rest of the year:</p><h4>April</h4><ul><li><a href="https://cloud.google.com/next"><strong>Google Cloud Next</strong></a> (Las Vegas, NV) — April 22–24</li></ul><h4>May</h4><ul><li><a href="https://flutterconf.es/"><strong>Flutterconf Spain</strong></a><strong> </strong>(Malaga, Spain) — May 08</li><li><a href="https://events.google.com/io"><strong>Google I/O</strong></a> (Sunnyvale, USA) — May 19–20</li><li><a href="https://www.ffdc.io/"><strong>Flutter Flow Developers Conference</strong></a><strong> </strong>(San Francisco, CA) — May 27–28</li></ul><h4>June</h4><ul><li><a href="https://mdevcamp.eu/"><strong>mDevCamp</strong></a> (Prague, Czechia) — June 03</li><li><a href="https://www.fluttertechsummit.com/"><strong>Flutter Tech Summit</strong></a> (Warsaw, Poland) — June 09</li><li><a href="https://config.figma.com/"><strong>Config</strong></a> (San Francisco, CA) — June 23–25</li><li><strong>I/O Connect Berlin</strong> (Berlin, Germany) — June 25</li></ul><h4>July</h4><ul><li><strong>I/O Connect Bengaluru</strong> (Bengaluru, India) — July 14</li><li><a href="https://www.flutterconusa.dev/"><strong>Fluttercon USA</strong></a> (Orlando, FL) — July 16–17</li></ul><h4>August</h4><ul><li><a href="https://ai4.io/"><strong>Ai4</strong></a> (Las Vegas, NV) — August 4–6</li><li><strong>I/O Connect China</strong> (China) — TBD</li><li><a href="https://www.renderatl.com/"><strong>RenderATL</strong></a> (Atlanta, GA) — August 12–13</li></ul><h4>September</h4><ul><li><a href="https://flutterfriends.dev/"><strong>Flutter &amp; Friends</strong></a> (Stockholm, Sweden) — Sept 3–5</li><li><a href="https://flutterconflatam.dev/"><strong>FlutterConf LATAM</strong></a> (Cancún, México) — September 22–23</li></ul><h4>October</h4><ul><li><a href="https://www.nextappcon.com/"><strong>next.app devcon</strong></a><strong> </strong>(Berlin, Germany) — October 7–9</li><li><a href="https://allthingsopen.org/events/all-things-open-2026"><strong>All Things Open</strong></a> (Raleigh, NC) — October 19–20</li><li><a href="https://medium.com/flutterkaigi/flutterkaigi-2026-%E9%96%8B%E5%82%AC%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B-f78a1421fe08"><strong>Flutter Kaigi/Ninjas</strong></a> (Tokyo, Japan) — October 29–30</li><li><a href="https://developers.google.com/community"><strong>Google for Developers events </strong></a><strong>(DevFest and Build with AI)</strong> — Throughout Fall and Winter 2026.</li></ul><p>Stay tuned and bookmark Flutter.dev’s <a href="https://flutter.dev/events">Events</a> page as we continue to add more events throughout the year.</p><p><strong>Are you hosting a Flutter event or meetup not listed here? Reach </strong><a href="mailto:dash-devrel@google.com"><strong>out to our team</strong></a><strong> to see if we can attend if we’re already in your area — we want to meet and share with as many of you as possible!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=51c3d7190e44" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/come-meet-the-flutter-core-team-on-tour-in-2026-51c3d7190e44">Come meet the Flutter core team on tour in 2026</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Flutter’s Material and Cupertino code freeze]]></title>
            <link>https://blog.flutter.dev/flutters-material-and-cupertino-code-freeze-d32d94c59c38?source=rss----4da7dfd21a33---4</link>
            <guid isPermaLink="false">https://medium.com/p/d32d94c59c38</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-material-design]]></category>
            <category><![CDATA[material-design]]></category>
            <category><![CDATA[flutter-cupertino]]></category>
            <dc:creator><![CDATA[Justin McCandless]]></dc:creator>
            <pubDate>Tue, 07 Apr 2026 16:01:02 GMT</pubDate>
            <atom:updated>2026-04-07T16:01:01.852Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JN1_t6kPRkgGFVJyetZE0w.png" /><figcaption>Material and Cupertino libraries are frozen and will be moved from the Flutter framework to new packages</figcaption></figure><p>We’ve been hard at work preparing to decouple Material and Cupertino from the Framework, and now our first major milestone has arrived! As of April 7th, all contributions to the Material and Cupertino libraries in flutter/flutter are frozen. Our next milestone will be the re-release of these libraries as the <a href="https://pub.dev/packages/material_ui">material_ui</a> and <a href="https://pub.dev/packages/cupertino_ui">cupertino_ui</a> packages on pub.dev.</p><p>This means that, after the code freeze, no more changes will be allowed to the Material and Cupertino libraries inside of flutter/flutter. Further development on these libraries will resume in the <a href="https://github.com/flutter/packages">flutter/packages</a> repository once the new packages are released.</p><p><strong>If you write Flutter apps or plugins, but don’t contribute to Material or Cupertino itself, you can stop reading now. This won’t affect you… yet.</strong></p><p>After the 3.44 stable release, the new packages will be published and developers will eventually need to migrate. The old Material and Cupertino code will be deprecated in the stable release <em>after</em> 3.44 and deleted some time after that. Of course, when the time comes, we’ll follow up with detailed instructions about this migration.</p><p>For those who actively contribute to these libraries or are otherwise invested in their development, here are some things you should know:</p><h3>What if you have PRs in flight?</h3><p>Despite the code freeze, we want development on Material and Cupertino to continue with minimal interruption! Any open PRs that touch Material or Cupertino should remain open, and reviewers will continue reviewing and giving feedback as usual. Once the new packages are published, we will provide instructions on how to port these kinds of PRs to flutter/packages. Eventually, your change will go out as a part of a new material_ui or cupertino_ui release.</p><h3>How about new and existing issues related to Material and Cupertino?</h3><p>Issues that relate to Material or Cupertino will remain in flutter/flutter as always. This unified issue tracker approach is the same pattern that we follow for other packages in the flutter/packages repo and a few other repositories.</p><h3>Why freeze the code now?</h3><p>The moment that we release the 1.0.0 versions of the material_ui and cupertino_ui packages, we think it’s important to have a seamless migration process for every Flutter developer who is ready to migrate, regardless of which release channel they’re coming from. This means that we need to keep the risk of breaking changes to an absolute minimum between the Material and Cupertino libraries in flutter/flutter and in flutter/packages. We can achieve this by freezing the code one stable release cycle ahead and copying that frozen code to the new packages.</p><p>The first step in the migration process for Flutter developers is to perform a normal SDK migration to v3.44 or above on any channel. Once there, we know that they have a copy of Material and Cupertino that is frozen. Even if they upgrade their SDK again, that Material and Cupertino code will not change (until it’s deprecated and deleted in the long term). What’s more, we know that the frozen Material and Cupertino code is identical to the code in the 1.0.0 material_ui and cupertino_ui packages, or as close to identical as possible. From there, the developer can migrate from the Material and Cupertino code inside their copy of the SDK onto the material_ui and cupertino_ui packages with minimal friction.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/961/1*NkrFO7smrNSo2NofNp0EVA.png" /></figure><h3>How we got here</h3><p>It’s been a long journey to this point with <em>many</em> contributions and feedback from across the community. A few months ago when I realized that we had test dependencies that would get in the way of decoupling, I posted an <a href="https://github.com/flutter/flutter/issues/177028">issue</a> and figured I was in for a lot of migration work. Instead, contributors from across the community immediately jumped in to help migrate hundreds of tests. The support we received from first-time contributors to veterans was critical to getting us ready for decoupling. THANK YOU!</p><h3>What’s next?</h3><p>After the code freeze, we’ll begin preparing for migration to the new material_ui and cupertino_ui packages. This includes tasks like porting the code over, implementing CI/CD, testing, and setting up docs infrastructure to make sure we can keep the same high quality developer experience that you expect from Flutter.</p><p>As the new packages near readiness, we’ll publish more information about how to migrate successfully, so keep an eye out. Also, if you see anything that you think we’ve missed, please jump in with an issue or a PR. We couldn’t have gotten this far without help from the amazing Flutter community, and we can’t wait to see where we’ll go from here.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d32d94c59c38" width="1" height="1" alt=""><hr><p><a href="https://blog.flutter.dev/flutters-material-and-cupertino-code-freeze-d32d94c59c38">Flutter’s Material and Cupertino code freeze</a> was originally published in <a href="https://blog.flutter.dev">Flutter</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>