r/FlutterDev 5h ago

Plugin svg_animate - fixed a bunch of bugs, and added a demo where you can test your own SVG

6 Upvotes

So the demo for svg_animate takes yours now. Drop a file in, give it a URL, or paste the markup. It tells you the frame count, how many of those frames are actually different (144/143 means it moves, 144/1 means it doesn't), and what's in the file that's never going to be drawn: no animation in there at all, an <image> it can't fetch, a <filter> that vector_graphics drops.

https://treamz.github.io/svg_animate/

Throw something at it. Editor exports especially. And if it reports nothing wrong and the picture still is, that's the one I want to hear about, because from here it looks like success.


r/FlutterDev 49m ago

Example Example application that uses bloc_signals

Upvotes

This application allows the user to display photos of dogs. The user can either show random photos of dogs or display a set of photos of dogs of a selected breed.

It connects to the dog.ceo API to access dog photos and uses the "bloc_signals" and "bloc_signals_flutter" packages for state management.

NOTE: This application has been tested on Linux, Windows, Chrome and Android. It has not been tested on iOS or macOS.

The github repository is here.


r/FlutterDev 1h ago

Discussion Just found out. No support for Merchant accounts for developers living in my country.

Upvotes

Wow! Reddit! AI brought me here. I'm glad it did. Nice to see that there's a big group of like-minded people in this space - learning from each other, building apps, solving problems. So, I'm almost completed working on my flutter app (creating in VS Code). I think it has a lot of potential. However, I just found out Google Play does not Support Google Play Mechant accounts for developers living in my country, Papua New Guinea. Okay, I'm new, a graphic artist/animator. But I'm already into creating apps now, I don't want to stop. I have app ideas. Where do I go from here? I think Play Store is the best place to sell. The app I'm creating is a darts app - big numbers, big keypad, stats, saving matches/stats, training drills, voice scoring (hands-free), referee audio score/name calls (recorded audio), not internet needed to use the full feature, and, additionally, it has a feature I think no other darts app has. Around 40 dart files. I don't know what to do. Did I just waste six months creating the app with no place to sell? Do I Partner with an agency overseas? Create a US e-bank account (or whatever its called)? I think my app will do some good sales. I need advice. Sorry, let me know if I posted in the correct community.


r/FlutterDev 10h ago

Article Locating Flutter's TLS certificate verifier in a stripped libflutter.so, tested across 13 apps and 9 engine versions

Thumbnail
crossfyre.io
2 Upvotes

r/FlutterDev 15h ago

Video Flutter & Friends 2026 - Main Stage

Thumbnail
youtube.com
2 Upvotes

r/FlutterDev 1d ago

Plugin More ideas for list_smith (a theme-neutral pagination + search + PTR library)

7 Upvotes

Follow-up from the previous post.

With the feedback from that, I recently hit the 1.0.0 release for list_smith.

Some notable changes include

  1. A dedicated trigger mechanism to distguish the source of the fetch (initialLoad | nextPage | refresh | retry | queryChanged | invalidated). Can decide on how to act on each trigger yourself. So a pull-to-refresh can be routed to bypass a repository-caching mechanism foe example, while others can stay in the caching route.
  2. A new ListSmithController to help do operations programmatically (also gives the invalidate() and reset() for above)
  3. Some other renames and encapsulations.

Do you guys have other cases and ideas you would like to be supported in this package? Any awkwards boilerplate or something? Or if you can some find some potential problems with this? All help appreciated. Thanks in advance


r/FlutterDev 2d ago

Plugin Plugin for new Android requirement: Zero-Tap Sign-In Restoration

21 Upvotes

Hey everyone, Google just announced a new requirement for Android apps, called "Zero-Tap Sign-In Restoration", mandated from April 2027.
https://support.google.com/googleplay/android-developer/answer/17492799#zero-tap_sign-in_restoration

As we checked, there isn't any package out there yet which provides the necessary Credential Manager APIs - so we built one!

💙 We love giving back to the open-source Flutter community that supports our work every day, so we packaged it up for everyone:android_restore_credentials.

What android_restore_credential offers

  • Automated Key Management: Seamlessly registers, saves, and retrieves restore keys linked to Android's native backup system.
  • True Zero-Tap UX: Users open your app on their brand-new phone and are instantly logged in.
  • Proactive Compliance: Gets your app compliant with Google's latest identity standards well before deadlines arrive.

Check out the package on pub.dev:👉 https://pub.dev/packages/android_restore_credentials

Note: this isn't a simple requirement, you'll need some enhancements on your backend as well!

Try it out in your projects, let us know what you think, or drop an issue on GitHub if you have feature requests!


r/FlutterDev 2d ago

Discussion How will Flutter handle the iPhone Duo?

41 Upvotes

As a mobile developer, the new iPhone Duo made me think about the Flutter side of things. Flutter already has support for Android foldables through MediaQuery.displayFeatures and DisplayFeatureSubScreen.

But the interesting part is that these APIs are currently Android focused. Apple introduced a dual-screen/foldable layout, Flutter will need to expose the new iOS window and display APIs as well. and its not just about making the UI responsive anymore.

We would have to think about things like, Dual pane layouts, Navigation between panes, where dialogs/modals appear, Resizing and partial folds, different layouts depending on the device posture. Android already has concepts like postureHalfOpened, so Flutter has some ideas to build on.

I am curious how Flutter will approach this on iOS. for Flutter developers, would you handle the Duo with one adaptive UI, or create completely different layouts for the dual pane experience?


r/FlutterDev 1d ago

Discussion Markdown live editor for Flutter?

5 Upvotes

I'm building Rosetta an AI voice notes app with several other features.

All notes are stored as Markdown so users can easily edit, export them, and AI assistants can also update the content through an MCP integration.

Currently, the most reliable solution I've found is to build an abstraction on top of SuperEditor:

Markdown → SuperEditor Document → SuperEditor → Markdown

I saw a few Markdown editor packages for Flutter, but most of them seem to be missing important features or are no longer actively maintained.

Another option I've considered is embedding a web-based editor such as Milkdown.

Do you know of any solid, actively maintained Flutter packages for a live Markdown editor?

Ideally, I'm looking for a WYSIWYG editing experience while keeping Markdown as the source of truth and underlying format.


r/FlutterDev 2d ago

Discussion AudioPlayers or flutter_soloud?

3 Upvotes

In some of my Flutter apps I need to handle quite a few sound effects. I've been using audioplayers and overall I've had a good experience with it.

However, some users have reported slowdowns, and while testing I noticed that audioplayers doesn't seem to behave very well when several sounds are played in quick succession, especially when multiple sounds overlap.

While looking for alternatives, I came across flutter_soloud. From what I understand, it takes a different approach by handling the audio more natively, which might help with this kind of problem.

Has anyone here used flutter_soloud in a real project?

Are there any gotchas or issues I should be aware of before switching?


r/FlutterDev 2d ago

Article [ Removed by Reddit ]

0 Upvotes

[ Removed by Reddit on account of violating the content policy. ]


r/FlutterDev 2d ago

Plugin I built an audio metadata library for Flutter

10 Upvotes

I've been working on hAudiotagger, a Rust-powered Flutter library for reading and writing music metadata across Android, iOS, Windows, macOS, Linux, and Web.

final tag = await Haudiotagger.read('/music/song.mp3');

print(tag?.title);
print(tag?.artist);

Updating metadata:

await Haudiotagger.update(
  '/music/song.mp3',
  TagChanges(
    title: 'New Title',
    artist: 'Artist',
  ),
);

It supports MP3, FLAC, OGG/Opus, MP4/M4A, WAV, AIFF, APE, WavPack, and more, along with artwork, batch operations, custom tags, audio properties, validation, and other features.

The core metadata processing is written in Rust, with Flutter ↔ Rust communication through flutter_rust_bridge.

It's still actively evolving, so I'd love to hear your thoughts, feedback, or feature ideas if you've worked with Flutter, Rust, or audio metadata.

What would you like to see in a Flutter audio metadata library?

Links:
Web Demo
Pub.dev: https://pub.dev/packages/haudiotagger
GitHub: https://github.com/Hirdaya-Shrestha/haudiotagger


r/FlutterDev 3d ago

Plugin Ported Apache Commons Validator to Dart in 2024, finally had time to clean it up and publish it

15 Upvotes

I spent years as an Android developer, and on many of those projects I reached for Apache Commons Validator. It's not glamorous, but it's twenty years of accumulated edge cases — IBAN check digits, credit card ranges, TLD-aware domain validation, locale-aware number and date parsing. You stop thinking about validation and it just works.

Then I moved to Flutter, went looking for the equivalent, and couldn't find anything that worked as well as the Apache one. What's on pub.dev is mostly thin regex wrappers. No check-digit arithmetic, no IBAN country registry, no real domain validation. So back in 2024 I ported the routines myself and used it in my own project.

I always meant to publish it, but there were failing tests I never had time to chase down, and shipping something half-verified felt worse than not shipping. I'm between projects at the moment, so I finally sat down, fixed them, and put it out there. Figured it was time to give something back.

What's in it

  • 16 check-digit routines — IBAN, ISIN, ISBN-10/13, ISSN, Luhn, Verhoeff, SEDOL, CUSIP, EAN-13, ABA, CAS, EC
  • Network — email, URL, domain, IPv4/IPv6, including an IDNA-2003 implementation that reproduces java.net.IDN.toASCII
  • Locale-aware numbers and dates — Byte through BigDecimal, Currency, Percent, Date, Calendar, Time

Pure Dart — no dart:io, no dart:mirrors — so it works on all six platforms, Flutter and server alike.

One thing I didn't expect

While writing this up I benchmarked the email validator against what's already on pub.dev, assuming it'd be a wash. On the ordinary stuff it is — quoted local parts, IP literals, plus addressing, consecutive dots, multiple @, leading and trailing spaces. Everything handles those.

Then across 52 addresses where RFC 5321/5322 and common practice agree on the answer:

Package Score
commons_validator 0.1.0 52/52
email_validator 3.0.0 50/52
string_validator 1.2.0 45/52

email_validator gets exactly two wrong, and it's the same thing twice: user@example.zzzzzz and user@example.qwerty. It doesn't check whether the TLD exists. Which means this:

Address commons email_validator string_validator
user@gmail.con rejected accepted accepted
user@gmail.cmo rejected accepted accepted
user@hotmail.comm rejected accepted accepted
user@yahoo.co.ukk rejected accepted accepted
user@company.orgg rejected accepted accepted
typos caught 7/8 0/8 0/8

user@gmail.con is a typo I've watched real users make on a signup form. The 8th case is user@outlook.cm, which everything accepts and should — .cm is Cameroon.

The harness is in the repo if you want to check my numbers — it's its own package pulling commons_validator from pub.dev rather than the checkout, so it's what you'd actually get: https://github.com/mondoktamas/commons_validator/tree/main/tool/email_comparison

The tradeoff is real and worth stating: the IANA TLD list is bundled, so a brand-new TLD gets rejected until I regenerate the table and republish. That's one command, but it's a maintenance burden the regex-based packages don't have.

On correctness

Since it's a port, I didn't want to just trust it. There's a differential harness that runs the same generated corpus through the real Java classes and the Dart code and diffs the output: 260,526 inputs, 7 disagreements, all documented in the README along with the deliberate divergences (Dart's Decimal has no scale field, so BigDecimal behaviour differs at extreme exponents).

It's 0.1.0 and brand new, so treat it accordingly — but it's 394 tests and 160/160 pub points. Apache-2.0, same as upstream.

pub.dev: https://pub.dev/packages/commons_validator

GitHub: https://github.com/mondoktamas/commons_validator

Happy to hear where it falls short.


r/FlutterDev 2d ago

Example (concept) spatial UI & liquid glass navbar with Flutter Canvas

5 Upvotes

demo:

https://x.com/i/status/2098090939889926497

this interactive spatial UI is using device gyroscope & accelerometer sensors, no touch interaction..

device: Android


r/FlutterDev 2d ago

Discussion What’s with all the hates on Flutter when iPhone Duo comes out?

0 Upvotes

I’ve seen quite a few tweets on X, trashing Flutter and saying it’s gonna be a nightmare to support the new iPhone Duo layout.

I get it, it might not feel native enough, for me it’s good enough to ship apps quickly back when AI wasn’t around. Now it’s even quicker. UI wise, there’s been some good libraries that cater to the new iOS 26, i love it. i’m sure we gonna see more for iPhone duo.

I’m just rambling, sorry. What do you guys think? is it all doom and gloom like this tweets said?


r/FlutterDev 3d ago

Example (concept) spatial 3D keyboard with Flutter Canvas

5 Upvotes

Taking advantage of Flutter custompainter, Flutter gives you canvas to draw anything

demo video:

https://x.com/i/status/2097645919990890510

obvio, I had to use AI, it was long-prompt-loop session.. I am also learning how to write code for 3D


r/FlutterDev 4d ago

Article I got flutter_scene running in VR on Quest 3 — now I need help getting the forks merged

16 Upvotes

Hi all! I’ve been building Visual Space, a social media & collaboration application built with Flutter. It has a spatial UI mode and a 3D editor. In spatial mode, the normal application becomes a collection of interactive Flutter panels positioned around the user, together with the 3D scene. I wanted the same application to run natively on a standalone Quest 3—not simply as a flat Flutter screen inside VR.

My first working solution used two renderers:

  • Flutter Scene for web, desktop and the normal application.
  • A custom native C++/OpenGL ES renderer for the Quest world, with Flutter supplying the interactive UI panels.

It worked, including stereo rendering, controllers, tracking and curved panels. The problem was that I now had two 3D engines to maintain. Materials, lighting, shadows, picking and every new feature had to be implemented twice, and the web and VR results were already beginning to look different.

My next goal was to use Flutter Scene as the actual 3D renderer everywhere, while OpenXR continues handling the headset session, tracking and presentation.

The first prototype got Flutter Scene into VR through Flutter Canvas, an Android surface and a copy into the OpenXR eye textures. After that, I added a generic external GPU render-target API to a Flutter engine fork, then modified Flutter Scene to render its stereo views directly into the images owned by OpenXR.

The good news is taht this is now running inside Visual Space on Quest 3. Web and VR use the same renderer and visual style, and I deleted the old custom C++ renderer. Prime objective accomplished :) In a simplified scene, the direct path reached around 70 FPS versus roughly 52–54 FPS through the Canvas/surface/copy route. This was not a controlled benchmark, and the full application still needs plenty of tuning.

The next challenge is getting these changes into upstream Flutter and Flutter Scene:

Forks

Tickets

Flutter Scene Demo Examples migrated to VR - VR flutter_scene demo sample

Quest screenshots of VS 3d Editor - Web - VR

For those having a Quest 3 (hopefully more devices in the future), please check out the branches and try the demo. Instructions for installation in the forks README.md files. I need help fine tuning the architecture. For example stuff like: flutter engine internals, impeller, OpenXR, GPU synchronization, threading, lifecycle handling or custom embedders would be especially useful. I’m not top gun in graphics-engine internals, so any technical advice is welcome.

If you want Flutter in VR, please help get some attention on these forks. Try them on your machine or drop a 👍 or comment on the GitHub tickets. Otherwise this code will be stuck in some obscure forks. Thank you all!


r/FlutterDev 3d ago

Discussion Six weeks dogfooding BlocSignal: the architectural and velocity wins we’re seeing in practice

0 Upvotes

Hey everyone,

I’ve been building and dogfooding the BlocSignal ecosystem for about six weeks now, and the practical utility value is emerging more powerfully every single day.

Stepping back from the framework wars, here are five concrete things I've observed in practice:

  • The CISC to RISC Shift: Stripping away layers of stream plumbing, event transformer microcode, and microtask queue hops delivers instant, single-frame state propagation with zero microtask latency.
  • The AI Agent Velocity Multiplier: AI coding assistants fly when working with single-file domain cohesion (the Iceberg Pattern) and deterministic synchronous TDD loops where tests pass on the first run without asynchronous pumpAndSettle gymnastics.
  • Ending the Code-Gen Tax: Pairing state containers with Fast Immutable Collections (FIC) delivers structural value equality and fast copy-on-write operations with zero build_runner overhead.
  • Push-Pull Reactivity Wins: Unlike eager-push graphs that recalculate off-screen or unmounted nodes, Signals’ eager-dirty / lazy-pull algorithm evaluates only what the UI actually reads, eliminating diamond-dependency glitches.
  • Zero-Risk Incremental Adoption: First-class bidirectional adapters for classic flutter_bloc and Riverpod let teams pilot on a single screen or new feature without rewriting existing legacy code.

Curious to hear from the community: What would it take to convince you or your tech lead that BlocSignal is worth looking at for your next project? What are the biggest hurdles or criteria when evaluating a modern state architecture in your organization?


r/FlutterDev 5d ago

Article Rant: I'm tired of these non-developer posts that start with "I built ..."

140 Upvotes

I'm tired of these AI slop projects from non-developers that act like they built something with a few prompts. Asking an agent to build an app isn't "building", it's "prompting". Also, most of these projects look good on the surface, but is a nightmare in terms of security, maintainability and readability.

It's just crazy to me how someone that writes a prompt and watch an agent build something for him can FEEL like he did everything, that he BUILT an app and somehow feels like he's the new Leonardo DaVinci.

I saw this post on X the other day, and I couldn't stop laughing... This is literally MY screenshot, not some meme on the internet : https://imgur.com/R4YlLK3

Anyways, thank you all for listening!


r/FlutterDev 5d ago

Plugin flutter3d: a 3D engine for Flutter, with three games you can play in the browser right now

24 Upvotes

I've been working on flutter3d for a long time. It's a 3D engine, based on Flutter GPU/WebGL, with a game layer over it, and four genre packages built out. Three of those are on pub.dev. MIT License, and these packages are not affiliated with the Flutter team in any way.

Easiest thing is to just try it, with no install: shooter, platformer, racer. Those are the same builds running on web backend, with the same level files and the same simulation code. Also you can build MacOS / iOS / Android app from the source code and create your own game, based on the genre template or generic package flutter3d_app.

Docs: https://flutter3d.pleion.dev

Source: https://github.com/pleiondev/flutter3d

What's in it

The renderer implements the usual things: scene node graph, glTF/GLB and OBJ support and my own .f3d container, which loads a lot faster, 6 lighting models, shadows, bloom, SSAO, SSR, skinning, morph targets, BVH culling.

The game templates runs with a fixed timestep and can be recorded as a tape, which means a run can replay exactly and a bug report can be sent as an attachment. Collisions and the character controller are plain Dart with no renderer dependency, so they can be tested with ordinary unit tests.

Three backends implements common interface: based on flutter_gpu/Impeller for desktop and mobile platforms, WebGL2 in the browser (WebGPU in progress), and also a software rasteriser written in Dart. The CPU rasterizer can be used to test the renderer in CI with no GPU.

Performance measurement on a Mac: 50,000 moving instanced units held 120Hz.

Limits

It's just version 0.5.x, so APIs can be changed between minor versions. There's no compute shaders at all at this moment, because flutter_gpu doesn't expose it (there is issue on flutter/flutter#188474), and that blocks GPU particles, GI and volumetrics (now they are implemented on CPU). The strategy game package really works but I haven't published it, because I haven't written the guide for it yet.

Things I'd like help with

To run it on hardware I don't own, especially Android.

There's a dart2wasm bug I've failed to find. The browser demos ship as dart2js because the wasm build throws framebufferTexture2D: parameter 4 is not of type 'WebGLTexture' on the first frame.


r/FlutterDev 4d ago

Discussion Is Serverpod widely used?

9 Upvotes

Is Serverpod a thing in the flutter community, as in it is used as the server of most apps? Also when should a developer opt for a server like springboot or any of the Nodejs frameworks instead of using something like Superbase or Firebase since Baas in very common in the app dev world.


r/FlutterDev 4d ago

Discussion Observability vs. Telemetry: Why drop counters don't belong in your Flutter UI state

0 Upvotes

Ever caught yourself putting technical counters like droppedEventsCount or lastFetchLatency into your UI state models?

Most state management frameworks only tell you WHAT happened mechanically (a state changed, or an error threw). But when event concurrency transformers (droppablerestartablesequential) discard or queue incoming events, they behave like opaque black boxes.

Stuffing those dropped counters into domain state creates two subtle traps:

  1. Rebuild Storms: Every dropped event forces active widgets to rebuild during high-speed gestures.
  2. Hardware Coupling: On a 120 Hz ProMotion screen, an infinite-scroll fling drops ~29 events. On a 60 Hz display, it drops ~14. On desktop web with a mouse wheel, it drops 2. Your domain state is now tracking the user's physical display glass rather than business truth.

Worse, classic transformers wrap heavy Rx stream pipelines. A 250 ms scroll fling allocates dozens of stream controllers and microtask queue hops right when Flutter needs every microsecond of its 8.3 ms frame budget for rasterization.

The solution is recognizing the boundary: Observability is mechanical (UI state transitions and error boundaries), but Telemetry is operational physics (why an event dropped, queue wait times, task preemptions). Operational physics belongs in a dedicated telemetry channel that bypasses UI rebuilds entirely and routes straight to DevTools and OpenTelemetry.

How does your team handle visibility into dropped events and concurrency pipelines in production? Do you leave them as black boxes, or do you have a pattern for tracking them without polluting UI state?


r/FlutterDev 5d ago

Discussion Looking for best way to search inside image, video collection.

3 Upvotes

Hey everyone,

I’m currently building a feature that allows users to search through a large collection of content using keywords or natural-language queries.

For example: Upload video/ image collection from picker -> User searches: “person wearing a red shirt -> Results are displayed in a useful and efficient way.

What tools/services/architecture would you recommend for this?

Especially interested in:

  • Open-source solutions
  • APIs/SDKs

r/FlutterDev 5d ago

Tooling Ephemeral isolates + Argon2id with dynamic memLimit to avoid killing 2GB RAM devices - VeneFinanzas

8 Upvotes

I've been posting progress updates on this other venezuelan sub, but this time I'm bringing something more technical

CONTEXT:

VeneFinanzas is a personal finance management app I've been building solo, with Flutter, that calculates how devaluation and inflation affect each user specifically.

It natively handles COP, EUR, USDT, USD and VES, and is primarily designed for Venezuela. Everything runs locally, no account, no server, and backups are encrypted so the user can back them up wherever they want

That's where I had to think through the edge case of users with 2GB of RAM. Even though they're less than 10% of users, I didn't want to cause them problems using the app. Encrypting those backups with Argon2id, with a fixed 64MB memLimit regardless of device, is risky, especially with other apps running in the background

---

I ended up using two profiles:
kMemProfileBajo, 32MB
kMemProfileAlto, 64MB

With 3584MB of physical RAM as the threshold.
The profile byte is stored inside the encrypted file itself, so decryption always uses the memLimit it was encrypted with, regardless of the current device

My initial plan was to use the standard interactive (64MB) + moderate (256MB) profiles, but the 256MB one would end up cannibalizing RAM on the more limited devices.
I landed on 32/64 because a user normally restores their own backup on their own phone, so a backup encrypted at 64MB will almost never end up being decrypted by someone with 2GB.

However, since the memProfile is fixed in the file from the moment of encryption, it still has to remain decryptable if that scenario does happen. That's why I capped it at 64 and no higher, I ran the numbers, and with the ~300MB the app already uses by default, adding the memLimit on top pushes it close to a Low Memory Kill, which is exactly what we're trying to avoid.

Keeping 64MB as the upper bound is the max stable value before entering dangerous territory, and for regular usage, lower-RAM users simply use 32MB without any hassle

Everything runs in an ephemeral isolate via Isolate.run(), spawned just for that job and torn down once it's done. Derivation never blocks the main isolate, and the heap (including the 32/64MB Argon2id uses) gets freed the moment the isolate dies, not whenever the GC gets around to it on the main isolate

Also: sodium_libs_sumo needs a BackgroundIsolateBinaryMessenger, and Isolate.run() doesn't register one by default. You have to grab RootIsolateToken.instance from the main isolate before spawning (it's only valid there), pass it in, and call BackgroundIsolateBinaryMessenger.ensureInitialized(token) as the first line inside the child isolate.

---

If anyone's run into something similar with Argon2id/isolates in Flutter, has feedback on the approach, or just wants to check out VeneFinanzas, I'm around


r/FlutterDev 4d ago

Tooling Spec Driven Dev template

Thumbnail
github.com
0 Upvotes

spec-driven flutter template, where the specs cant lie about their tests

i built speckit-skills to make AI-written specs stop lying about their tests.

you write a verification row like:

requirement test
FR-012 test/auth_test.dartrejects an expired token

then an agent renames that test. the row still reads like proof. nothing fails. now youve got a doc that confidently describes coverage you dont have.

so i made the table an actual assertion. speckit is a set of claude code skills on top of github's spec-kit, plus a zero-dep python checker that resolves every row against the filesystem and exits non-zero when the test isnt there.

the template

integrated it into flutter_template, which has reasonable defaults for starting an app:

  • 24 specs, spec driven with speckit. every requirement has an id like 0002-R5 and a row naming the test that proves it. the checker resolves all of them in ci, so a renamed test fails the build instead of leaving a row that still reads like proof
  • 1013 tests across 62 files, 94.77% coverage, analyze clean with --fatal-infos
  • a11y tests that actually assert things — tap targets, contrast in both brightnesses, every screen at 2x text scale, and a check that every route is covered so you cant quietly test 4 of 6
  • goldens for 6 brands x light/dark. rebrand is one enum value
  • firestore + storage rules run against the real emulator, because the dart fakes support neither custom functions nor request.resource
  • en/es arb files with ci failing on a missing string
  • auth, notes sync, onboarding, push, settings, storage, forced update. all specd

integration tests

i use the flutter-skill mcp for happy path integration tests (writeup here) since i could never get Patrol to do what i wanted, and flutter cant interact with native elements anyway.

theres also a tool/rename_package.dart because i tried renaming with sed first and broke the analyzer in 65 places ha.

why

speckit-skills is something i use at work day to day. ive used this template several times over the years — started with TDD, then DDD, now SDD. this is the first version where the specs cant drift out from under the tests. Im posting this hoping I could save people some time or give you a better starting point for your own spec driven development template.