<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: FlutterSDK</title>
    <description>The latest articles on DEV Community by FlutterSDK (@fluttersdk).</description>
    <link>https://dev.to/fluttersdk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13641%2Fd97b393b-4309-421f-80c3-6c756c489f82.png</url>
      <title>DEV Community: FlutterSDK</title>
      <link>https://dev.to/fluttersdk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fluttersdk"/>
    <language>en</language>
    <item>
      <title>I Built Dusk: Playwright MCP, but for Flutter Apps</title>
      <dc:creator>Anılcan Çakır</dc:creator>
      <pubDate>Sun, 14 Jun 2026 17:09:36 +0000</pubDate>
      <link>https://dev.to/fluttersdk/i-built-dusk-playwright-mcp-but-for-flutter-apps-l5m</link>
      <guid>https://dev.to/fluttersdk/i-built-dusk-playwright-mcp-but-for-flutter-apps-l5m</guid>
      <description>&lt;p&gt;Last week I watched my AI agent try to test a Flutter screen. It wrote a test file, ran &lt;code&gt;flutter test&lt;/code&gt;, copied the stack trace back into the prompt, pasted a screenshot, and called it a workflow. It was slow, and it was guessing.&lt;/p&gt;

&lt;p&gt;On the web, agents do not work like that anymore. Playwright MCP gives them an accessibility tree to read and stable refs to act on. 33k stars, no screenshot guessing. Flutter never had that layer.&lt;/p&gt;

&lt;p&gt;So I built Dusk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;End-to-end testing on Flutter has always been a stitched-together ritual.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;flutter_driver&lt;/code&gt; ships a one-off socket protocol and is on the legacy track. &lt;code&gt;integration_test&lt;/code&gt; runs in-process against a simulated &lt;code&gt;WidgetTester&lt;/code&gt;, but you write a test file, build, run, and wait. Maestro is nice but pays around 3 seconds per action. Patrol is powerful but tends to be unstable on CI.&lt;/p&gt;

&lt;p&gt;The deeper issue is the loop. An agent that wants to drive your app reaches for ad hoc &lt;code&gt;flutter test&lt;/code&gt; runs, copies stack traces by hand, and pastes screenshots back. There is no live connection between the agent and the running app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// The old loop: write a test file, build, run, wait, read the failure, repeat.&lt;/span&gt;
&lt;span class="n"&gt;testWidgets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'checkout flow'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tester&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;tester&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;tap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;byKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'checkout'&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;tester&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pumpAndSettle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// ...and you still rebuild and rerun the whole thing to see what happened.&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How Dusk handles it
&lt;/h2&gt;

&lt;p&gt;Dusk attaches to a running Flutter app over VM Service extensions. No test file, no &lt;code&gt;flutter_test&lt;/code&gt; harness, no build step. You start your app, attach, and the agent has eyes and hands.&lt;/p&gt;

&lt;p&gt;First it snapshots the Semantics tree:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dart run fluttersdk_dusk dusk:snap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns a YAML tree with stable &lt;code&gt;[ref=eN]&lt;/code&gt; tokens. Every action targets a ref, so there is no brittle XPath and no coordinate guessing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dusk:tap &lt;span class="nt"&gt;--ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;e7
dusk:type &lt;span class="nt"&gt;--ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;e3 &lt;span class="nt"&gt;--text&lt;/span&gt; &lt;span class="s2"&gt;"ada@fluttersdk.com"&lt;/span&gt;
dusk:screenshot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same contracts power your terminal and your AI agent. &lt;code&gt;dusk:tap --ref=e7&lt;/code&gt; on the CLI and &lt;code&gt;dusk_tap&lt;/code&gt; as an MCP tool reach the exact same code path. 32 CLI commands and 31 MCP tools: snap, tap, type, scroll, drag, observe, screenshot, and a hot-reload-and-snap round trip that returns the new tree, a screenshot, and any exceptions in one call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it does not flake
&lt;/h3&gt;

&lt;p&gt;Every gesture passes a 6-step actionability gate before it runs: not defunct, enabled, non-zero rect, on-viewport (it auto-scrolls), stable across 2 frames, and actually hit-testable. So your agent never taps a button that is not really there yet.&lt;/p&gt;

&lt;p&gt;This is the part that turns "drive the app" from a demo into something you trust. The boring check is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it fits
&lt;/h2&gt;

&lt;p&gt;Dusk does not replace your test suite. It owns a different niche: the unscripted, running app.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Where Dusk fits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;integration_test&lt;/td&gt;
&lt;td&gt;Authored test file via &lt;code&gt;WidgetTester&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Owns the test file. Dusk owns the live, unscripted app. Use both.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;patrol&lt;/td&gt;
&lt;td&gt;Native dialogs on integration_test&lt;/td&gt;
&lt;td&gt;Owns authored tests with native permissions. Dusk owns ad hoc driving by humans and agents.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flutter_driver&lt;/td&gt;
&lt;td&gt;Legacy socket protocol&lt;/td&gt;
&lt;td&gt;Dusk is hot-restart safe, one contract for CLI and MCP, no separate isolate.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;maestro&lt;/td&gt;
&lt;td&gt;YAML DSL over the OS accessibility layer&lt;/td&gt;
&lt;td&gt;Dusk drives the Flutter widget tree directly. Zero YAML to author.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;playwright-mcp&lt;/td&gt;
&lt;td&gt;Browser MCP via the accessibility tree&lt;/td&gt;
&lt;td&gt;Dusk is the Flutter-native equivalent, ported to Semantics.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub add fluttersdk_dusk
dart run fluttersdk_dusk dusk:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;dusk:install&lt;/code&gt; patches &lt;code&gt;lib/main.dart&lt;/code&gt; behind &lt;code&gt;kDebugMode&lt;/code&gt; and scaffolds the CLI. Release builds tree-shake the entire driver across web, desktop, and mobile, so Dusk never ships to production.&lt;/p&gt;

&lt;p&gt;Wire it into your agent with one more command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dart run fluttersdk_dusk mcp:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That registers the stdio MCP server for Claude Code, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible agent. Dusk also ships its own agent skill, so the agent learns the ref grammar and the tool surface, not just the syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;Two things stuck with me.&lt;/p&gt;

&lt;p&gt;First, the accessibility tree is the right interface for agents on Flutter just as much as on the web. Semantics nodes are stable, cheap, and already there. Screenshots are the slow, expensive fallback, not the default.&lt;/p&gt;

&lt;p&gt;Second, the actionability gate matters more than the tool count. An agent that taps confidently on a widget that has not settled is worse than no automation at all. The 6-step check is what makes the rest usable.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://fluttersdk.com/dusk" rel="noopener noreferrer"&gt;https://fluttersdk.com/dusk&lt;/a&gt;&lt;br&gt;
Agent setup: &lt;a href="https://fluttersdk.com/dusk/ai" rel="noopener noreferrer"&gt;https://fluttersdk.com/dusk/ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it with your agent, I would love to hear what breaks. That's all.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built the iOS 27 Liquid Glass Look in Flutter (No Shaders)</title>
      <dc:creator>Anılcan Çakır</dc:creator>
      <pubDate>Thu, 11 Jun 2026 18:24:59 +0000</pubDate>
      <link>https://dev.to/fluttersdk/i-built-the-ios-27-liquid-glass-look-in-flutter-no-shaders-1359</link>
      <guid>https://dev.to/fluttersdk/i-built-the-ios-27-liquid-glass-look-in-flutter-no-shaders-1359</guid>
      <description>&lt;p&gt;This week at WWDC 2026, Apple refined Liquid Glass for iOS 27. The headline is a translucency slider that runs from ultra clear to fully tinted, and the whole system reacts to motion: surfaces lens the background, catch specular highlights, and pick up tint from the content behind them.&lt;/p&gt;

&lt;p&gt;I wanted to see how close I could get to that look in Flutter. Two problems showed up fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flutter does not ship a Liquid Glass widget
&lt;/h2&gt;

&lt;p&gt;In April 2026 the Flutter team &lt;a href="https://blog.flutter.dev/flutters-material-and-cupertino-code-freeze-d32d94c59c38" rel="noopener noreferrer"&gt;froze new Material and Cupertino design work&lt;/a&gt; inside the SDK. New design work, including any iOS 26/27 Cupertino styling, moves to standalone packages later. So there is no official Liquid Glass widget today, and there will not be one for a while.&lt;/p&gt;

&lt;p&gt;The community filled the gap with packages that reach for the real optics: &lt;code&gt;BackdropFilter&lt;/code&gt;, custom &lt;code&gt;FragmentProgram&lt;/code&gt; shaders, refraction, the works. That is the faithful route and it is genuinely impressive. But it also means offscreen render passes and shader code for what is, at the end of the day, a card with a nice background.&lt;/p&gt;

&lt;p&gt;I went the other way. I built the look, not the optics, with no shaders and no &lt;code&gt;BackdropFilter&lt;/code&gt; at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Liquid Glass actually is (and what I skipped)
&lt;/h2&gt;

&lt;p&gt;Be honest about this part. Apple's Liquid Glass is a real-time optical simulation: it bends light per pixel, samples the layer behind the element, and reacts to device motion. Reproducing that needs Metal-level control of the render pipeline.&lt;/p&gt;

&lt;p&gt;I did not reproduce any of that. What I kept is the visual vocabulary that reads as glass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;translucent fills layered over a vivid background&lt;/li&gt;
&lt;li&gt;light, semi-transparent borders that catch a highlight&lt;/li&gt;
&lt;li&gt;soft depth shadows&lt;/li&gt;
&lt;li&gt;generous rounded corners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is Liquid-Glass-inspired, not Liquid Glass. You get the look; you do not get the lensing. The upside: no offscreen blur pass, so it stays cheap on mid-range devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it with utility classes
&lt;/h2&gt;

&lt;p&gt;I used &lt;a href="https://fluttersdk.com/wind" rel="noopener noreferrer"&gt;Wind UI&lt;/a&gt;, our utility-first styling library for Flutter. Think Tailwind, but it compiles classNames to real Flutter widgets. The glass surface is just a &lt;code&gt;WDiv&lt;/code&gt; with a className string. No custom painter, no shader, no nesting ten widgets deep.&lt;/p&gt;

&lt;p&gt;Here is the core of the translucency card:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;WDiv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;className:&lt;/span&gt; &lt;span class="s"&gt;'''
    w-[360px] flex flex-col gap-6 p-7 rounded-3xl
    border border-white/40 dark:border-white/30
    bg-white/15 dark:bg-white/10
    shadow-2xl shadow-black/30 dark:shadow-black/50
  '''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// settings icon, the iOS 27 badge, the slider, the buttons&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read that className and you can see the whole trick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bg-white/15&lt;/code&gt; is a 15% white fill. Over a colorful background it reads as frosted glass. Wind parses the &lt;code&gt;/15&lt;/code&gt; and applies it with &lt;code&gt;Color.withAlpha&lt;/code&gt;, no &lt;code&gt;Opacity&lt;/code&gt; widget needed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;border border-white/40&lt;/code&gt; is the catch-light edge. A thin, 40% white border is what your eye reads as the rim of a glass panel.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shadow-2xl&lt;/code&gt; is a drop shadow for depth. Important: this is a drop-shadow blur (it softens the shadow itself), not a backdrop blur. The content behind the card is never sampled or blurred.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rounded-3xl&lt;/code&gt; and the layered translucency do the rest.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "glass over color" effect needs something vivid behind it, so the card sits on a gradient with a few color orbs (also just translucent &lt;code&gt;WDiv&lt;/code&gt;s):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;WDiv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;className:&lt;/span&gt; &lt;span class="s"&gt;'''
    relative w-[420px] h-[600px] overflow-hidden rounded-[44px]
    bg-gradient-to-br from-orange-300 via-pink-500 to-purple-700
  '''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;WDiv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;className:&lt;/span&gt; &lt;span class="s"&gt;'absolute -top-14 -left-10 w-56 h-56 rounded-full bg-amber-200/40'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;WDiv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;className:&lt;/span&gt; &lt;span class="s"&gt;'absolute top-40 -right-14 w-64 h-64 rounded-full bg-fuchsia-300/40'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="c1"&gt;// the glass card on top&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The orbs are not blurred either. They are translucent circles, and the layered transparency is what sells the depth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four surfaces, same primitives
&lt;/h2&gt;

&lt;p&gt;I built four iOS-27-style surfaces this way. Same building blocks (translucent fills, borders, shadows, a gradient), different layouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The translucency control card&lt;/strong&gt;, the iOS 27 headline feature:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfnqlby6jkpn55d922ad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfnqlby6jkpn55d922ad.png" alt="Liquid Glass translucency control card" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live and runnable: &lt;a href="https://fluttersdk.com/wind/snippets/63ygefgd/flutter-ios-27-liquid-glass-translucency-control-card" rel="noopener noreferrer"&gt;https://fluttersdk.com/wind/snippets/63ygefgd/flutter-ios-27-liquid-glass-translucency-control-card&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A floating glass tab bar&lt;/strong&gt; over a gradient home:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzh2ys8xbgfluona5qd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzh2ys8xbgfluona5qd3.png" alt="Liquid Glass tab bar" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fluttersdk.com/wind/snippets/ujfa333h/flutter-liquid-glass-tab-bar-with-floating-navigation" rel="noopener noreferrer"&gt;https://fluttersdk.com/wind/snippets/ujfa333h/flutter-liquid-glass-tab-bar-with-floating-navigation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A now-playing card&lt;/strong&gt; where the album art bleeds its color through the surface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff355txm9ptotk0k46pfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff355txm9ptotk0k46pfu.png" alt="Liquid Glass music player" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fluttersdk.com/wind/snippets/78hfr0re/flutter-liquid-glass-music-player-with-now-playing-card" rel="noopener noreferrer"&gt;https://fluttersdk.com/wind/snippets/78hfr0re/flutter-liquid-glass-music-player-with-now-playing-card&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The iOS 27 Siri panel&lt;/strong&gt; with a soft glow from the Dynamic Island:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futwx9v0284au74gsg478.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futwx9v0284au74gsg478.png" alt="iOS 27 Siri AI panel" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fluttersdk.com/wind/snippets/nt4rbedt/flutter-ios-27-siri-ai-panel-with-dynamic-island-glow" rel="noopener noreferrer"&gt;https://fluttersdk.com/wind/snippets/nt4rbedt/flutter-ios-27-siri-ai-panel-with-dynamic-island-glow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every one of these is a &lt;code&gt;WDiv&lt;/code&gt; tree with className strings. Open any playground link and you can read the whole source and edit it live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You do not need a shader for the look. Layered translucency over a vivid background gets you most of the way, and it is cheap. Save the shaders for when you actually need refraction.&lt;/li&gt;
&lt;li&gt;The border is doing more work than the fill. A thin &lt;code&gt;border-white/40&lt;/code&gt; is the single class that makes a translucent box read as glass instead of a faded box.&lt;/li&gt;
&lt;li&gt;Be honest in your copy. This is Liquid-Glass-inspired, not the real lensing. Developers notice, and the honest version is the more useful tutorial anyway.&lt;/li&gt;
&lt;li&gt;Utility classes keep the surface readable. The whole glass card is one className string you can scan in a second, not a &lt;code&gt;BoxDecoration&lt;/code&gt; buried in a &lt;code&gt;Container&lt;/code&gt; buried in a &lt;code&gt;Stack&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub add fluttersdk_wind
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docs: &lt;a href="https://fluttersdk.com/wind" rel="noopener noreferrer"&gt;https://fluttersdk.com/wind&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you build a Liquid-Glass surface with it, drop a link in the comments. I want to see how far the no-shader approach can go.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>ios</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
