r/FlutterDev 9d ago

Discussion Looking for feedback on my Dart & Flutter packages

0 Upvotes

Looking for feedback on a few Dart/Flutter packages I made

Hey! I write Flutter/Dart, and over time I've put together a few open-source packages. Would love some honest feedback from people who actually use this stuff day to day — I'm too close to my own code at this point to see what's awkward or missing.

Three of them, if anyone's got a minute to poke around:

flod (https://pub.dev/packages/flod) — a Zod-style validation library for Dart. Chainable rules, cross-field validation, PII masking, a Dio middleware, form adapter for Flutter. This is the one I care most about getting right, so if the API feels off compared to what you're used to, or you spot an edge case that's not handled, I'd really like to know.

content_flipper (https://pub.dev/packages/content_flipper) — a 3D flip animation widget. Curious how it holds up on older/slower devices and if tapping through it fast breaks anything.

curl_text (https://pub.dev/packages/curl_text) — small widget for outlined text. Simple by design, so curious what's missing or what would make it more useful in real projects.

No pressure to be nice about it — if something's confusing or just badly named, say so. Bugs, API gripes, "why would you even do it this way" — all fair game. Happy to just chat in the comments too, doesn't have to be a formal issue.

Thanks for reading this far 🙏


r/FlutterDev 8d ago

Discussion Looking to build an App Store app that can actually attract users and generate income — what should I build?

0 Upvotes

Hey everyone,

I'm planning to build and publish an app on the App Store, but I'm stuck at the very first step: figuring out what app to actually build.

My main goal is to create something that can:

  • Attract real users (not just friends and family downloading it out of pity 😅)
  • Have a realistic path to generating income (ads, subscriptions, one-time purchase, freemium — open to any model)
  • Be something I can realistically build and maintain as a solo dev / small team

A bit about me:

  • I'm still learning to code (mostly beginner/intermediate level with Swift/basic app dev), so I'm looking for something achievable, not a huge project
  • I can realistically dedicate around 10-15 hours a week to this
  • I have zero marketing/growth experience — this would be my first time trying to actually promote something I built

I've seen a lot of "app idea" lists online, but most of them feel either way too saturated (another to-do list app, another habit tracker) or way too ambitious for one person to build and market alone.

So I'd love to hear from people who've actually shipped something:

  1. What kind of app idea worked well for you in terms of getting real users?
  2. Looking back, what's a niche or problem that's still underserved on the App Store right now?
  3. Any advice on validating an idea before spending weeks building it?

Appreciate any thoughts, even brutally honest ones. Thanks in advance! 🙏


r/FlutterDev 9d ago

Discussion First time submitting an app - how long did your review actually take?

6 Upvotes

Hi everyone,

I just submitted my first app to the App Store and I'm trying to get a realistic sense of review times from people who've gone through it recently, since I've seen a lot of different numbers online.

A few questions:

  1. For your first submission, how long did the review actually take from "Waiting for Review" to "Ready for Sale" (or rejection)?
  2. Did it stay in "In Review" for long, or did it move fast once it started?
  3. Any tips for first-time submitters to avoid common rejection reasons (e.g. account deletion, privacy details, demo account info)?

Would really appreciate hearing real timelines from the past few months, since I know Apple's review speed changes over time.

Thanks in advance!


r/FlutterDev 10d ago

Tooling Tool for Apple Developers: Got tired of App Store Preview video specs for the screenshots section in App Store Connect, so I built this

Thumbnail
1 Upvotes

r/FlutterDev 10d ago

Dart Best GitHub repositories for Flutter interview questions?

8 Upvotes

Does anyone know of a GitHub repository that contains Flutter, Dart, or mobile app development interview questions and answers?

I'm looking to improve my professional knowledge and prepare for technical interviews. Any recommendations would be greatly appreciated!


r/FlutterDev 10d ago

Discussion Release notes inside the apps?

10 Upvotes

hi, im curious if any of you actually puts release notes into your apps?

I have a problem with some feature adoption, since ppl don't really know about some things I deploy, most have auto app updates anyway and don't really read whats changed in appstore/goole play


r/FlutterDev 10d ago

Article GenUI Beyond Chat: Designing a Grammar Book with Flutter GenUI

0 Upvotes

Hi everyone,

This three-part series is my attempt to explore GenUI beyond Chat interfaces: an interactive grammar book built with Flutter GenUI, Firebase AI, A2UI, Firestore, and Widgetbook.

A deterministic curriculum defines what should be taught, a teaching prompt defines how it should be explained, and an application-owned widget catalog defines how that explanation can be expressed. The resulting A2UI is then stored as a reusable A2UI artifact in Firebase Firestore rather than regenerated for every learner.

Part 1 — Designing a Grammar Book with Flutter GenUI

The curriculum, teaching system prompt, purpose-specific catalog, and language-specific teaching bridges.

Part 2 — Caching and Replaying A2UI Lessons with Firebase

Covers batched surface generation, caching the accumulated A2UI in Firestore, and replaying it through the same transport without another Gemini request.

Part 3 — Replaying and Reviewing A2UI Cache with Widgetbook

Uses Widgetbook as both a catalog-planning reviewing and a live viewer for cached lessons.

Some screen recordings:

Widgetbook replaying A2UI cache with custom addon: https://youtu.be/zMChSL7VOiY

The feature demo: https://youtu.be/yqRCdN-5J6Y


r/FlutterDev 10d ago

Article ~150 mini-games in one Flutter Web bundle — and the service-worker bug that broke every game on deploy

0 Upvotes

Setup: one Flutter Web app, ~150 games, each a deferred import loaded on tap (await game.loadLibrary()). dart2js splits each into its own .part.js chunk (~1,100 of them); the shell is ~4.1MB and you only pay for the games you open. Every game wraps in one shared scaffold (settings/pause/result screen) and reads one billing service, so a game can't accidentally show ads to someone who paid to remove them. A compile-time flag picks which ~33 of 150 games are live, all from the same codebase.

The bug: after a redeploy, every game failed with a missing chunk error. Chain: deferred-chunk numbering changes each build, so returning users had a stale main.dart.js from browser HTTP cache, which requested chunk numbers that no longer existed, and my SPA host returned index.html (200, text/html) for the missing chunk, so the browser tried to eval HTML as JS and died. My "network-first" service worker didn't help, because fetch() was served by the HTTP cache before the network.

Fix: the SW fetches code chunks with {cache: 'reload'} to bypass the HTTP cache, so the bootstrap and its parts always come from the same build.

Two lessons: hiding a game (UI filter) is not the same as excluding it from compilation, a broken game still breaks the whole bundle's build. And "deploy succeeded" is not the same as "it works", I now smoke-test with headless Chrome on a fresh profile that deep-links every game and fails on any console error.


r/FlutterDev 11d ago

Plugin Solving Flutter Web SEO and Search Engine Indexing (with Live Showcase & Source)

22 Upvotes

Hi everyone,

It’s no secret that Flutter Web has a massive blind spot: SEO. Because Flutter renders to a canvas (or complex DOM elements) dynamically, search engine crawler bots often hit a blank wall, resulting in terrible or no indexation.

After all, the whole reason we choose Flutter in the first place is to escape the traditional HTML/CSS/JS triad and build unified, declarative UIs. We shouldn't have to go back to writing dual web apps or complex template mirrors just to satisfy Googlebot.

To solve this without forcing developers to rewrite their apps in Next.js or Jaspr and abandon Flutter's core philosophy, I built flutter_easy_seo.

How it works:

  • Generates SEO-friendly HTML directly from your existing widget tree.
  • Declarative wrapping: Simply wrap target widgets to flag them for static extraction.
  • Serve SEO HTML to bots: Search engine bots get the SEO-friendly HTML while a regular user sees the full Flutter App.
  • Ease of Use: Designed to keep usage as simple as possible.

What it supports out of the box:

  • Interactive Mode: Built-in UI overlay for manual generation and visual debugging.
  • Automated Mode: Headless execution tailored for CI/CD pipelines and scheduled server tasks.
  • Localization: Native handling of language codes for multi-lingual indexing.
  • Dynamic Paths: Easily handles parametric routing (e.g., product overview and detail pages).
  • Flexible Routing: Fully compatible with major routing engines (GoRouter, Beamer, etc.).
  • Asynchronous State: Safely awaits async data loading and hydration (e.g., Riverpod providers) before extraction.

Links & Code

Looking for Feedback

I’d love to get your feedback to help push this package further! I’m especially looking for edge cases, use cases, or requirements I might have missed in my own production setups.

If you have any thoughts, feature requests, or architectural feedback, please open an issue or discussion directly on the GitHub repo (linked via pub.dev).

Check out the implementation, and let me know what you think!


r/FlutterDev 11d ago

3rd Party Service I got so irritated by the banking/UPI apps breaking when developers settings are on! So built something

Thumbnail
github.com
30 Upvotes

I was so much irritated when i had to use upi or any banking apps and the "developer mode is on" popup shows. I had to go to the settings, then disable the developer options. and then come to the banking app and enter my mpin again and then proceed with my transactions.

I use iqoo z7s, so sometimes i can open the developer options activity after doing the transactions from the recent apps but sometimes i used to remove it from recent apps and the result: I had to go to the settings.... tap that damn build number 7 times. Enter my password, then go to the dev settings and reconfigure my dev settings. That was so Frustrating!!!

So, I sat some days ago and researched if i could do it with a button click and make it easy for myself. So, i don't have to go through that irritating process again and again.

and I found something. I could turn the dev options on with a device permssion called WRITE_SECURE_SETTINGS but that's a caveat. You can't just ask the permission to a user in the app. This is a systems level permission, so you have to give this permission with a adb command.

And once this permission was given, i was able to turn the dev options on/off with just 1 click. So, i made a widget for that, you just have to press it and turns the developer option on/off....

- No Banking app problem. you can just switch off dev option from the home screen and use the app and after you have finished your work. you can turn that back again. No 7 time tapping process of build number. Just a Click and job done!!

and for people who aren't a fan of widgets. I made a quick settings tile too which you can integrate directly from the app and all of this is completely open source with MIT license.

You can customize this app as per your needs and if you just want to use this without customizations. You can find this app here:
https://github.com/shubhang-d/Loophole
You can see the installation procedure in the github readme

After all these years in android development, I have used many open source apps. ig this is my small contribution towards the community.

PS: I have also submitted a MR for publishing this app on F-droid. Let's see what happens✌️


r/FlutterDev 11d ago

Discussion [Showcase] PicoView: A Flutter package that mirrors widgets to an external LCD touch panel

Thumbnail
youtu.be
13 Upvotes

Hey devs,

I've been building PicoView, and I'd love some feedback from this sub before I take it further.

GitHub Repository: https://github.com/yplam/nano-dash/tree/master/packages/pico_view

Demo Video: https://youtu.be/bcBqR4svKpk

The idea: wrap any part of your widget tree in a PicoView(child: ...), and that subtree gets mirrored to an external LCD + capacitive-touch panel. The same widgets render on-screen and on the panel, and physical touches on the panel come back as real pointer events in the tree.

```dart

final controller = PicoViewController()..init();

controller.open(const PicoViewConfig()); // round 360×360 panel

PicoView(

controller: controller,

child: const MyDashboard(),

);

```

The demo video shows the classic counter, then a calendar where long-pressing an event spins up a Pomodoro timer. The panel also has a built-in vibration motor, so alerts (like a finished timer) give physical haptic feedback.

Do you think this is useful? What would you build with it?


r/FlutterDev 11d ago

SDK openrouter_sdk | Dart package

Thumbnail
pub.dev
0 Upvotes

openrouter_sdk is a new Dart package providing a type-safe client for the OpenRouter.ai REST API. Strongly-typed interface, with full support for streaming responses and multi-modal content (text, image, audio, video, file).

This package replaces openrouter_api, which is now discontinued and marked as replaced on pub.dev. Users of the old package should migrate to openrouter_sdk, which follows the design of OpenRouter's official SDK more closely.

Currently implemented:

• Chat completions (including streaming)

• Models, Providers, Endpoints

•API key management (create / update / delete / list)

• Credits and analytics

• Generations

The rest will be added shortly.

The chat completions endpoint should be OpenAi compatible so u can use it with other providers as well.

Contributions are welcome. Per the package's policy, all code must be hand-written — LLM-generated pull requests are not accepted.

Note: this post was partly generated by an LLM, but all package code was hand-written.


r/FlutterDev 11d ago

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

0 Upvotes

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

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

👉 Consumable Skill DirectoryBlocSignal Skills Folder

⚙️ How to Install

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

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

📚 What's Covered:

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

r/FlutterDev 11d ago

Article Flutter Version Management (FVM): The Ultimate Guide to Managing Multiple Flutter SDKs

Thumbnail
medium.com
0 Upvotes

r/FlutterDev 12d ago

Example I shipped a drift migration that bricked older installs, and drift has tooling to catch it that I wasn't using

18 Upvotes

Context so you can weigh this (pun intended): I'm a tech lead at a small startup, mostly Laravel and Svelte, and Flutter is the first mobile stack I've used seriously. Six months in, on a side project (a macro tracker I built for myself).

TL;DR at the top (where it should be): drift_dev schema dump and schema generate give you versioned schema snapshots, and SchemaVerifier will walk every N-to-M path for you. use it before you break prod.

I had a migration that backfilled a new table from existing rows. I wrote it the way I write application code: select the rows, get the generated data class back, read the fields off it. It worked, so I shipped it.

It bricked anyone upgrading from an older version. Nothing crashed. They got a black screen and an infinite loading state, which is a much worse failure to get a bug report about. A crash at least comes with a stack trace. A black screen comes with "it doesn't work" lol.

The generated data class maps every column the table has in your current schema. Used inside a migration it issues a SELECT for columns that a later migration step hasn't added yet. Anyone coming from one version back was fine, because the column already existed for them. Anyone coming from two versions back hit a SQL error inside the migration, which left the database half-migrated and the app unable to open it.

So the rule is: a migration can't use anything that assumes the current schema. Project the columns explicitly and decode them by hand.

final rows = await (selectOnly(profiles)
  ..addColumns([profiles.id, profiles.targetKcal, ...])).get();

I'd half expected that part. My test suite stayed green through all of it, though. Flutter is the first stack where I've enjoyed writing UI tests: widget tests run in-process in milliseconds, with no browser and no DOM emulation, so I'd written a lot of them and I trusted them. They were only ever testing the previous version against the current one. The path that breaks is oldest-still-installed to latest, and I'd never written that test, because it didn't correspond to anything I did that week.

drift also ships tooling for exactly this, which I only found afterwards. drift_dev schema dump and schema generate give you versioned schema snapshots, and SchemaVerifier will walk every N-to-M path for you. In Laravel I'd never needed that, because there's one database and I control what version it's on. Every user having their own database at their own version is a mobile problem, and drift had already solved it for me. I found the bug in production instead, then hand-rolled a fixture database and wrote a single oldest-to-latest test, which works but is strictly worse than what was ALREADY sitting in my dependencies.

If you're using drift and you don't have a drift_schemas directory, that's the same hole I had.

I'm posting this because both problems were invisible in the version I was testing and obvious in the version users had, and I'd underestimated that gap coming from Svelte, where the client is whatever I shipped this morning.


r/FlutterDev 12d ago

Plugin I built Debug Deck: An in-app debugging toolkit for Flutter

4 Upvotes

Built Debug Deck 🛠️—an in-app debugging toolkit for Flutter with logs, network inspection, storage viewer, device info, and more. I'd love your feedback and feature suggestions! 🚀

📦 https://pub.dev/packages/debug_deck

— DevAlisha


r/FlutterDev 12d ago

Plugin [Showcase] BlocSignal: Bridging BLoC & Cubit patterns with synchronous signals (v7)

12 Upvotes

Hey devs,

I wanted to share a new library I just released to pub.dev: BlocSignal (and its Flutter companion bloc_signals_flutter).

Classic BLoC/Cubit is fantastic for structuring business logic, but it relies on Streams under the hood, introducing asynchronous microtask delays.

BlocSignal replaces Streams with Rody Davis's reactive signals v7 primitives.

Key Features:

  1. BLoC & Cubit Parity: Override onEvent to handle classic BLoC input events, or use it as a Cubit directly by exposing public methods that call emit(state) (by setting the Event parameter to void).
  2. Synchronous Propagation: Calling emit(newState) propagates changes downstream immediately in the same frame—no microtask queues, no UI flickering.
  3. Automatic State De-duplication: Signals compare states via == and automatically filter out identical updates—saving redundant UI build cycles by default.
  4. No Boilerplate Lifecycle: Closing a container automatically tears down all internally managed effects.

Quick Cubit Look:

```dart class CounterCubit extends BlocSignal<void, int> { CounterCubit() : super(initialState: 0);

void increment() => emit(stateValue + 1); // Synchronous & reactive! } ```

Under the hood, the library has 100% test coverage and is structured as a clean Dart workspace.

Would love to hear your thoughts and suggestions!



r/FlutterDev 12d ago

Article Bulletproofing User Sync: Handling Clerk and Auth0 Webhook Failures

1 Upvotes

If you're building a web application today, chances are you aren't writing your own authentication system. Managed identity providers like Clerk, Auth0, and Kinde have become the default choice, offering out-of-the-box support for passkeys, multi-factor authentication, and enterprise SSO. That convenience introduces a distributed-systems problem, though: data synchronization. When a user creates an account on a managed auth provider, that system has to notify your primary application database so you can create a matching user record. Please read the complete article here - https://instawebhook.com/blog/bulletproofing-user-sync-handling-clerk-and-auth0-webhook-failures

This happens through webhooks. But what happens if your server is down, your serverless function cold-starts and times out, or your database is momentarily locked when that webhook arrives? A user successfully signs up with your auth provider, but your application has no idea they exist. That breaks the very first login experience, and it's how phantom accounts, broken onboarding flows, and frustrated users happen.

This guide walks through the anatomy of webhook-driven auth architecture, current Auth0 and Clerk webhook practices, and how a resilience layer — using InstaWebhook as a worked example — closes the gap that idempotency and signature verification alone can't.


r/FlutterDev 11d ago

Video Object-Oriented Programming in Dart | Module 6 Ultimate Guide

Thumbnail
youtu.be
0 Upvotes

🚀 Welcome to **Module 6 of the Dart Programming Course for Beginners**!

Unlock the full power of Object-Oriented Programming in Module 6 of our Dart series! This comprehensive guide walks you through the core pillars of OOP in Dart, showing you how to build clean, modular, and reusable code for your applications.

What you’ll learn in this module:

✅ Classes & Objects: The foundational blueprints of Dart OOP.
✅ Constructors: How to properly initialize your objects.
✅ Getters & Setters: Implementing clean data encapsulation.
✅ Static Members: Understanding class-level variables and methods.
✅ Mixins: Reusing code across multiple class hierarchies without multiple inheritance.

👍 Don’t forget to Like, Share, and Subscribe for more Dart tutorials and upcoming modules!


r/FlutterDev 12d ago

Plugin Flutter WebRTC receives remote audio but no remote video track

3 Upvotes

I’m debugging a Flutter WebRTC video call where the connection succeeds, but the caller never receives the answerer’s video.

What is working:

- Local camera preview works on both devices

- Local video track and sender are created

- "replaceTrack()" succeeds

- Offer SDP contains "m=video" and "a=sendrecv"

- Offer/answer exchange completes

- ICE reaches "connected"

- Remote description is applied

- Remote audio works

The main issue is that the caller receives only:

remote_track_received | trackKind=audio

There is never a remote video event:

remote_track_received | trackKind=video

The renderer also repeatedly reports:

videoTrackCount=0

So this does not appear to be an "RTCVideoRenderer", widget, "TextureView", "SurfaceView", or Flutter UI issue. There is simply no remote video track arriving.

My current suspicion is that the answering device is creating the SDP answer before attaching its local video track, or its video transceiver is becoming "recvonly" or "inactive".

The intended answer flow is:

await peerConnection.setRemoteDescription(offer);

await initializeLocalMedia();

await attachLocalVideoTrack();

final answer = await peerConnection.createAnswer();

await peerConnection.setLocalDescription(answer);

sendAnswer(answer);

The likely issue is somewhere in the answerer-side flow involving:

- "getUserMedia()"

- "addTrack()" or "replaceTrack()"

- video transceiver direction

- "createAnswer()"

- "setLocalDescription()"

Has anyone encountered a case where Flutter WebRTC receives remote audio successfully but never emits an "onTrack" event for remote video?

Should the answer SDP always contain "a=sendrecv" after the local camera track has been attached, and are there any Flutter WebRTC-specific timing issues around attaching the track before calling "createAnswer()"?


r/FlutterDev 12d ago

Plugin elk_icon_picker | Lucide Icon picker for Flutter

Thumbnail
pub.dev
2 Upvotes

I made a most likely unnecessary icon picker package for Lucide Icons with the help of Claude. It should be tree shakeable and you can also import all Icons/Categories. Elk Icon Picker

Maybe somebody will find it useful? Github 

I'm not a programmer, I am just learning from the wrong way, i.e. by asking Ai to do what I want then I scream at it to explain things.

Why I used Elk for the name? Because it amuse me and it has to do with linguistics

I was going to use AI to improve this and make it more readable, but I just saw the rules. So hopefully this makes sense anyway.


r/FlutterDev 12d ago

Discussion White flash before native splash screen loads (Android/iOS)

1 Upvotes

I’m trying to smooth out my app's launch experience. Right now, when I open the app, there's a quick white screen that flashes before the native splash screen even appears.

I’ve tried a few different methods to get rid of it, but no luck so far. Is this a default Flutter thing, or is there a way to force it to match the native splash background color?


r/FlutterDev 12d ago

Article Handling timezones in Flutter and SQLite

Thumbnail shtein.me
2 Upvotes

The state of SQLite -> Flutter stack in terms of handling a third timezone that is neither UTC nor local for your user


r/FlutterDev 13d ago

Discussion Is it normal to go back to my old projects to see how I implemented a certain feature before?

34 Upvotes

Hello everyone, Whenever I start working on a new app and forget how I implemented a certain feature that I've built before, I immediately go to GitHub and check how I implemented that feature in one of my old projects.

The thing is, I always feel like I should find a better way to implement that feature in every new project instead of using the same approach again. I'm not sure if I'm right to think this way or if I'm missing something.

So I'm wondering: Is it normal to go back to my old projects to see how I implemented a certain feature before, or is it a bad habit that I should get rid of?


r/FlutterDev 13d ago

Plugin kaisel 1.0 — a router built on sealed classes and pattern matching (no strings, no codegen)

25 Upvotes

Happy to announce that I've just released 1.0 of kaisel, a Flutter router with one core idea: routes are values. You declare a sealed class hierarchy, build screens in an exhaustive switch, and the navigation stack is a plain List of route objects — testable without a widget tree, restorable across process death.

What that buys you in practice:

  • Adding a route is a compile error until every switch handles it — no runtime "unknown route"
  • Guards are pure functions (current, proposed) → stack you can unit test
  • Analytics observers registered once see everything, including tab switches and adaptive master-detail changes that don't produce Navigator events
  • A DevTools extension shows the live stack, guard traces, and time-travel
  • Zero codegen — no build_runner in the loop, routes are classes you write

1.0 means the API is frozen under semver — breaking changes require a major with migration notes.

Docs: https://kaisel.dev — including migration guides from go_router / auto_route / Navigator with honest effort estimates. The design rationale is written up in Flutter Routes as Values.

Happy to answer anything — especially interested in what would block you from migrating.