r/FlutterDev • • 12h ago

Discussion I don't recognize my own app anymore

18 Upvotes

I've been doing Flutter for about 5 years and for the last 6 months Claude Code has written most of our app. I still review everything, coderabbit / claude review catch the obvious stuff first and I read what's left, so it's not like nobody looks at it.

Yesterday a user reported that the checkout screen freeze on older Android phones and I opened the file and genuinely didn't recognize it. 1,400 lines, three different state approaches in one widget tree, a Riverpod provider I had never seen before that apparently I approved in August.

I ended up asking the agent to explain my own screen to me. It fixed the freeze in ten minutes, which made it worse somehow.

The app is about 80k lines now and I think I could explain maybe a third of it.

Is anyone else maintaining a Flutter app they didn't really write?


r/FlutterDev • • 9h ago

Discussion I want to learn flutter and app development deeply

6 Upvotes

Hi Flutter community! 
I'm a beginner in Flutter and I've been learning how to implement widgets and state management and more while building some hands-on projects.

I'm eager to dive deeper into Flutter and mobile dev in general. Any recommendations for good books, blogs, or video tutorials to help me keep growing?


r/FlutterDev • • 47m ago

Plugin Flutter power

• Upvotes

Hi there, I'm a software developer and this is my first time using Flutter. As of today, I've made a lot of progress on a mobile game, but I'd like to know how far Flutter can be pushed. Do you guys know of any games built with it on the Play Store, or any famous ones?


r/FlutterDev • • 14h ago

Plugin I built an open-source sync engine for offline-first Flutter apps . looking for feedback

6 Upvotes

Hey everyone! 👋

I've been working on SyncForge, an open-source synchronization toolkit for Dart and Flutter, and I'd love to get feedback from other developers here.

One of the challenges with offline-first apps is handling what happens when users make changes without a connection, multiple devices edit the same data, or an app needs to recover queued writes after restarting.

SyncForge is my attempt to make that synchronization layer modular and reusable instead of rebuilding it for every project.

The project consists of three packages:

- "sync_engine" — A pure-Dart core with vector clocks, CRDT primitives, conflict-resolution strategies, and a retryable outbox.

- "sync_engine_drift" — Persistent storage using Drift/SQLite, including outbox durability and tombstone tracking.

- "sync_engine_generator" — Code generation for strongly typed synchronization adapters using "build_runner".

The architecture is designed around pluggable storage and transport, with retry backoff, jitter, and dead-letter handling.

📦 Package: https://pub.dev/packages/sync_engine

💻 Source code: https://github.com/Wolfof420Street/flutter_sync_engine

📖 Architecture and examples: https://billodida.dev/projects/syncforge

It's still early-stage, so I'm not presenting it as a battle-tested production solution. I'm looking for developers who are interested in offline-first architecture and willing to challenge the design, try the examples, or point out gaps.

I'd particularly appreciate feedback on three things:

  1. Would you use a reusable sync engine like this, or do you prefer implementing synchronization within each application?

  2. What would you want to see before trusting a library like this with real application data?

  3. Which conflict-resolution or synchronization scenarios do you think are hardest to get right?

Constructive criticism is very welcome. I'm building this in the open and would love to learn from developers who've dealt with synchronization in real projects.

Thanks for taking a look! 🙌


r/FlutterDev • • 6h ago

Dart Shipping a puzzle game in plain Flutter (no Flame): vector art as Dart data, an A* solver for hints, and a test that bans magic numbers

0 Upvotes

I just shipped Boba Sort, a water-sort puzzle (bubble tea, 500 levels, 17 eras of Japanese history) built with plain widgets and CustomPainter, no game engine. A few things that worked, and a few trade-offs, in case they help someone.

**1. All the art is data, not images**

There are no image assets at all. Each era has a full-screen scene, a cup design, a mascot costume and a customer, and I design them as SVG inside an HTML mockup. A small Python script reads named SVG groups and writes Dart lists:

final jomonBackdrop = <VShape>[

VCircle(292, 190, 54, fill: Palette.jomonSun),

VPath('M0 330 Q60 262 132 300 Q206 236 276 288 ... Z',

fill: Palette.jomonFarMountain),

...

];

`VShape` paints fill then stroke, like SVG, and `VPath` parses the `d` string once and caches the `Path`. All 17 eras × 4 kinds of art come to about 240 KB of generated Dart, stay sharp on any screen, and colors can only come from named palette entries (the script refuses anything else).

Because scenes sit behind the cups, a test renders every backdrop and checks each pixel's luminance stays inside a window (light eras ≥ 0.662, dark ≤ 0.0395), which keeps the cup outlines at ≥ 7:1 contrast wherever the cups land.

**2. Toppings: draw the vector once, then blit sprites**

Each drink has a topping (pearls, grass jelly, red bean...) drawn as vector art, and the top-layer pieces drift idly. A full board can have 200+ pieces, and redrawing that much vector art every frame is wasted work. So each topping is rasterized once per size into a `ui.Image`: sizes are bucketed to 4 physical px, kept in a 48-entry LRU (a plain insertion-ordered Map: remove + re-insert on hit, evict and `dispose()` the first key), and each frame just draws images.

**3. The rules are pure Dart, and an A* solver does the heavy lifting**

`lib/core` never imports Flutter: model, rules, level generator and solver are plain Dart with unit tests. The solver is A*, with each cup packed into one int (8 bits per layer) so states hash fast.

The 500 levels are generated offline: deal random cups, solve, score difficulty from moves, dead ends and branching, keep the median of 8 candidates, or the hardest of 32 for the "hard" levels in the sawtooth curve.

Hint uses the same solver at runtime, on the UI thread, with a 100k-node budget (about 0.4 s worst case in debug). Every bundled level is generated under that budget, so Hint always works from the start. One surprise: "Add cup" makes hints much slower, since an extra empty cup blows up the branching, so the hint search drops surplus empty cups first and only searches the full board if that finds nothing. If I raised the budget I'd move it to an isolate.

**4. A test that fails on magic numbers**

Every spacing, font size, radius and color is supposed to come from tokens. A test scans `lib/features` and `lib/theme` and fails on raw numbers inside `EdgeInsets`, `SizedBox`, `fontSize`, `BorderRadius` and `Color(0x...)`, with an escape hatch: a `// tokens: allow — <reason>` comment. Painters are exempt, since their numbers are geometry. It is a dumb regex-and-parentheses scanner, but it kept the UI consistent through a lot of screens.

**Stack:** Riverpod (thin providers), shared_preferences, google_mobile_ads, Firebase Analytics / Remote Config / Crashlytics, audioplayers.

Play Store, if you want to see the result: https://play.google.com/store/apps/details?id=com.harbourlab.bobasort&referrer=utm_source%3Dreddit_flutterdev%26utm_medium%3Dsocial%26utm_campaign%3Dlaunch

Happy to go deeper on any part. I'm curious how others handle heavy CustomPainter scenes.


r/FlutterDev • • 16h ago

Plugin Introducing universal_bluetooth_classic!

6 Upvotes

Hi all,

We've just released 1.0 of our universal_bluetooth_classic Flutter plugin, a Bluetooth Classic package that works across Android, iOS, macOS, Windows & Linux.

iOS developers in the house might be aware that using Bluetooth Classic on iOS is no picnic. It requires peripherals to be MFi-certified, and the whole communication has to go through Apple's EAAccessoryManager. As far as I can tell, universal_bluetooth_classic is the only plugin that supports Bluetooth Classic on iOS.

We have been using it in production for a while now so you can consider it battle-tested. Happy to receive issues and PRs.

If instead you are looking for a Bluetooth LE plugin you can have a look at universal_ble which just hit 3.0!


r/FlutterDev • • 1d ago

Plugin code_forge migrated from rust backend to pure dart.

Thumbnail
pub.dev
38 Upvotes

Hello, I'm the author of the code_forge package, a very powerful text field widget capable of handling even 1M+ lines of text smoothly, where the default TextField widget crashes the app for a few thousand lines.

The package backend was written in rust using the ropey and zed_sum_tree crates, resulting in no web support and requiring the user to install rust in their system to build the package. Because of that most of the people migrated to an alternative package called re_editor.

I removed the rust backend and implemented rope data structure and zed_sum_tree like Layout mapping in pure dart.


r/FlutterDev • • 1d ago

Tooling Free tool: generate iOS + Android icons, splash screens and store screenshots for your Flutter app in one go

13 Upvotes

Shipping a Flutter app means making assets for two stores. I made a free browser-based set of tools for that:

  • Icon generator: AppIcon.appiconset + Android mipmaps/adaptive icon in one ZIP
  • Splash screens incl. the Android 12 splash icon
  • Screenshot maker for App Store (6.9") and Google Play sizes
  • Privacy policy generator (covers AdMob/Firebase)

https://appnimbus.net

Everything runs locally in your browser. I know flutter_launcher_icons exists. This is for people who prefer a visual tool or need store screenshots too. Feedback welcome!


r/FlutterDev • • 13h ago

Tooling Letting your agent test the Flutter app it just wrote: looking for feedback

1 Upvotes

I’ve been working on Argent, an open-source MCP server that lets your agent (Claude Code, Codex, Cursor, etc.) use your app on the iOS/Android/web. It can tap through flows, read logs and network calls, take screenshots, aaaaand many more 😂 That way it can check its own changes instead of just saying it’s done

I know I know, it comes from the React Native world and we have some beef 😅 But this one is truly cross-platform and works with Flutter apps too! If you’re letting an agent drive your Flutter app, what’s working, and where does it fall apart? We really want to keep improving it for every framework!! 🤭


r/FlutterDev • • 1d ago

Tooling We’re building a design tool for Flutter to replace Figma. Would love some feedback!

Thumbnail
youtube.com
5 Upvotes

Hey Flutter builders!

I’m one of the co-founders of Nowa (https://nowa.dev), and we recently launched a version that lets designers inside Flutter teams design directly on the Flutter codebase instead of in Figma. This way developers can work on logic/data in parallel while designers build the full design and experience themselves, all in the same Flutter repo.

We’ve been designing Nowa inside Nowa itself for a while without talking much about it, since our focus was making Nowa an app-building platform for people who don’t know Flutter. Then a few companies pushed us to make this use case public, and now we’re considering making it our full focus.

So the way it works that Designers connect Claude Code, Cursor or Codex to Nowa through MCP, import the Flutter repo itself, and design with AI with full visual editing. They set up the design system directly in Nowa which reflect it in the Flutter repo, test different states for each UI component, build and share prototypes that feel like the final version, and own the full experience with things like animations.

To make that work, we came up with an architecture we called “PureUI”. It splits UI and logic into two separate packages, similar to MVI but more decoupled, with a small contract that defines how they work together: the “data” and the “actions”.

Designers import the UI package into Nowa and work on it, while developers work on logic/data in the logic package using their IDE and AI agent. Things like state management stay under the developers’ control as well.

So I’d love to hear from Flutter devs here who work on Flutter teams: does this problem exist on your team, and what could we do differently to make this more useful for your case?

Any input or opinion is highly appreciated!


r/FlutterDev • • 17h ago

Article Struggling to Find Issues in Your Flutter Project? Meet flutter_auditor

Thumbnail
medium.com
0 Upvotes

r/FlutterDev • • 1d ago

Discussion Curious, what is the lightest weight flutter app actually released?

9 Upvotes

I am looking for the framework I will make my mobile app with and a huge requirement is that I need it to be small in size. I've been looking at Tauri apps and they are consistently under 70 MB. Can Flutter match or beat that (Lowest I've seen is 53 MB)


r/FlutterDev • • 1d ago

Dart VeloceNet Studio 1.4: my network monitor finally remembers things

2 Upvotes

Last time I posted this was v1.2, when it was a ping matrix plus traceroute, DNS, port scan and a few other tabs. The obvious problem was that it forgot everything the moment you closed it, which is a weird thing for a monitoring tool to do. The last two releases were mostly about fixing that.

New since then:

- 7 days of uptime history per target, with outages and how long they lasted
- an MTR tab that traces once, then keeps pinging every hop so you can see where the loss starts. There's a re-trace button for when the route changes
- Telegram / Discord alerts when something goes down or comes back. You can edit the message format, there's a cooldown so a flapping host doesn't spam you, and an HTTP proxy option for places where Telegram is blocked
- tray mode, so it keeps monitoring after you close the window
- an update checker (you can turn it off)

Still not great: native ICMP is Windows only for now, so Linux/macOS use TCP pings. The macOS build is unsigned (right-click > Open the first time). And Linux tray support depends a lot on your desktop, so if it acts weird on KDE/XFCE/whatever, please tell me.

the probing runs in a Rust lib over FFI, so the engine handles 100+ targets fine. What actually starts to hurt at a few hundred is the grid rebuilding every 500ms and decoding the snapshot (each target carries a 40-sample history). Virtualizing the grid is next. If you've done something similar with a fast-updating dashboard, I'd like to hear how you handled it.

Free, GPL-3.0, builds for Windows/Linux/macOS:
https://github.com/Cadman021/VeloceNet-Studio/releases


r/FlutterDev • • 2d ago

Plugin I spent 2.5 years building the Flutter library I wish existed

Thumbnail molloeduardo.github.io
85 Upvotes

Hello Flutter devs! 👋

After two and a half years of development, I’m finally excited to share Bonsui, a free and open-source Flutter library I’ve been building entirely on my own.

My goal was simple: create a comprehensive toolkit that makes Flutter development faster, cleaner, and more enjoyable, without sacrificing flexibility or customization. All of this with one single code-base that automatically changes the design on Android and iOS.

What’s inside Bonsui?

  • 🎨 Highly customizable UI components: beautiful, ready-to-use widgets designed to fit your app’s identity.
  • 🧩 Complete design system: a consistent, fully customizable design system to keep everything looking and feeling cohesive.
  • 📱 Ready-to-use screens: prebuilt screens to help you get started faster.
  • ⚙️ Built-in services: utilities and integrations for localization, Supabase, local notifications, local databases, and more.
  • 🛠️ Developer utilities: helpful tools to simplify everyday Flutter development.

And here’s something I’m particularly proud of:

Every single line of code was written by hand, without AI-generated code. Just two and a half years of learning, experimenting, refactoring, and paying attention to the little details.

Bonsui is completely free and open-source, and I plan to keep improving it over time.

I’d genuinely love to hear what the Flutter community thinks! Feedback, suggestions, and contributions are more than welcome.

If you find it useful, a ⭐ on GitHub would mean a lot! Thanks for checking it out! 💙


r/FlutterDev • • 1d ago

Dart I built a retro brutalist cassette music player in Flutter

Thumbnail
github.com
1 Upvotes

Hey everyone,

I wanted to share Velvetune, an open-source Android music player I built with flutter.

GitHub Repository: https://github.com/WarmSpark/velvetune

Releases (APK): https://github.com/WarmSpark/velvetune/releases/tag/v1.0.0


r/FlutterDev • • 1d ago

Tooling VS Code extension to manage device states like light/dark, font size, display density, etc.

5 Upvotes

Hey everyone!

I recently built my first VS Code extension, Device Toolkit, to easily manage light/dark mode, navigation mode, etc. and published it on the VS Code Marketplace.

The idea came while developing and testing Android apps. Whenever I wanted to test dark and light themes on the emulator, I had to switch to the emulator, pull down the notification shade, and toggle Dark Mode manually. Even harder for changing font size and switching navigation mode between 3 buttons and swipe gestures.

I thought it would be nice to have these controls directly inside VS Code, similar to Android Studio's Extended Controls.

The funny part is that I had zero TypeScript knowledge when I started. 😅 I used ChatGPT to plan the features and prepare the requirements, then used Antigravity to build the extension. I tested things, fixed bugs, made changes, and kept adding features until I was happy with it.

Here's what it supports so far:

  • Toggle Dark Mode on connected Android devices and emulators
  • Switch between gesture, 2-button, and 3-button navigation
  • Adjust font size and display density
  • Toggle TalkBack and Select to Speak on and off
  • Toggle layout bounds for UI debugging (Not so useful for flutter devs)
  • Record emulator screens and save them as MP4 (up to 3 minutes)
  • Floating debug toolbar and Activity Bar sidebar

It's now available on the VS Code Marketplace!

Marketplace: https://marketplace.visualstudio.com/items?itemName=antonyaiwin.device-toolkit

GitHub: https://github.com/antonyaiwin/device-toolkit-vs-code-ext

This was my first time building something like this, and it was a fun experience. There are probably things I can improve, so I'd love to hear your feedback if you give it a try.

If you find any bugs or have ideas for new features, feel free to open an issue on GitHub. Contributions are welcome too!

If you love the extension please give the repo a star ⭐ and add rating in VS Code marketplace.


r/FlutterDev • • 1d ago

Discussion Is learning Flutter worth it right now?

0 Upvotes

I am trying to learn Flutter, but I am feeling hesitant due to the presence of AI. I want to build applications, yet the cost of using AI is high for me given my region and income. The question is: should I learn using the traditional method?


r/FlutterDev • • 1d ago

Plugin FLutter emulator

0 Upvotes

can anyone tell me about free extension or tool that is light and not heavy and can run my flutter app in emualtor on my laptop my laptop is not with too much good specs so keep in mind


r/FlutterDev • • 2d ago

Tooling Reverse-engineering Liquid Glass

Thumbnail
pub.dev
9 Upvotes

For about a month, I’ve been working on understanding how Apple’s Liquid Glass effect is rendered and how its underlying physics work.

Since UIKit is closed-source, I couldn’t directly inspect the exact parameters Apple uses. So, I started analyzing the effect step by step, studying its behavior through screen captures, fluid dynamics, and reflections.

After a lot of experimentation, I was finally able to build Liquidum, a Flutter library that renders the Liquid Glass effect using shaders.

I’ve also spent a significant amount of time optimizing the rendering pipeline to ensure smooth performance, even on low-end Android devices.

On top of that, Liquidum includes additional customization options beyond Apple’s implementation, such as changing the glass tint as it moves.

Currently, the library supports the navigation bar, but I hope to add more components in the future.

🔗 GitHub: https://github.com/mohamedalsamrai/liquidum
📦 Pub.dev: https://pub.dev/packages/liquidum

I’ve come across quite a few Liquid Glass libraries on pub.dev, but I haven’t found many that achieve this level of visual fidelity and smooth performance.


r/FlutterDev • • 1d ago

Discussion Built a casual grid-based merge game using Flutter + AI assets. Looking for performance and layout feedback!

1 Upvotes

Hey everyone. I'm a solo dev and I wanted to see how well Flutter handles a casual, grid-based merge system with continuous state updates and canvas re-draws.

The game is called Emoji Kingdom. I used generative AI tools to handle the asset pipeline to save time, and built the entire UI, state management, and grid engine in Flutter.

Right now, I'm sitting at the early launch stage (10+ downloads) and really want to test how the frame rates hold up across different Android device specs. If you have 2 minutes to install it and give me some feedback on the UI responsiveness and layout scaling, I’d really appreciate it.

Package ID on Google Play: com.garaitapas2atgmaildotcom.emojikingdom

(I will drop the direct Play Store link in the comments below to keep this clean). Thanks!


r/FlutterDev • • 1d ago

Discussion The Developer’s Guide to App Localization: Choosing Your Target Languages Using Global GDP and Population Data

0 Upvotes

The Developer’s Guide to App Localization: Choosing Your Target Languages Using Global GDP and Population Data

When you build a Flutter app, implementing localization (l10n) is technically straightforward. Packages like flutter_localizations and intl make the setup a breeze.

The real challenge isn't how to translate your app—it's deciding which languages are actually worth the development time, maintenance overhead, and translation costs.

If you look strictly at population data, you might build a translation strategy that tanks your ROI. If you look strictly at wealthy countries, you miss out on massive viral growth. To build a highly optimized localization roadmap, we have to look at the intersection of global population (user volume) and World Bank Income Groups / Share of Global GDP (purchasing power).

Here is how to tier your Flutter app’s localization strategy for maximum global impact.

Tier 1: The Core Global Essentials (Launch Day)

These languages cover the largest portion of global wealth (High Income) and massive populations. If you want a strong global baseline with high monetization potential, start here.

  • English (en): The undisputed baseline. It acts as the global lingua franca across high-income tech hubs, international business, and premium app users.
  • Mandarin Chinese - Simplified (zh_CN): Targets the world’s largest Upper-Middle Income population. If you plan to release on alternative Android stores in China or target tech hubs like Singapore, this is non-negotiable. (Note: Use Traditional Chinese zh_TW if targeting Taiwan or Hong Kong).
  • Spanish (es): The most efficient translation codebase you can buy. A single localization folder unlocks Spain (High Income), Mexico and Colombia (Upper-Middle), and the highly lucrative Hispanic market inside the United States.
  • Japanese (ja): A premium, High-Income market. While localized to essentially one country, Japanese users have some of the highest Average Revenue Per User (ARPU) in the mobile app ecosystem.
  • German (de): The economic engine of Europe. Essential for capturing high-spending consumer and B2B SaaS markets across Germany, Austria, and Switzerland.

Tier 2: High-Value European & Gulf Markets (Premium Revenue)

If your app monetizes via subscriptions, in-app purchases, or premium B2B tooling, these High-Income regions should be next on your roadmap.

  • Arabic (ar): Targets the GCC nations (UAE, Saudi Arabia, Qatar). This region represents immense wealth, high disposable income, and a strong cultural preference for fully localized apps. Bonus: Flutter handles RTL (Right-to-Left) beautifully out of the box, making this technically smooth.
  • French (fr): Covers France, Canada, Belgium, and Switzerland, while opening future growth corridors into rapidly developing economic regions in North and West Africa.
  • Korean (ko): South Korea is a highly digitized, High-Income tech hub. Users there have an exceptionally high density of app usage and a strong willingness to pay for software.
  • Portuguese - Brazilian (pt_BR): While Portugal is High-Income, Brazil is a massive Upper-Middle Income powerhouse that dominates the South American app market by sheer download and engagement volume.

Tier 3: Massive Population Volume (Viral Scale & Ad Networks)

If your app’s business model relies on viral growth, network effects, or ad revenue (low ARPU but massive volume), these Lower-Middle Income regions provide the scale you need.

  • Hindi (hi): Accesses the massive, rapidly expanding digital ecosystem of India. While urban Indian tech users navigate apps in English, Hindi is vital for reaching the broader mass market.
  • Indonesian (id): Indonesia is Southeast Asia’s largest digital economy, featuring a massive, young, mobile-first population scaling rapidly into higher income brackets.

Summary Localization Roadmap

Priority Locale Codes Business Goal Metric Anchors
Tier 1 en, zh_CN, es, ja, de Immediate Revenue + Global Base High Income / 40%+ of Global GDP
Tier 2 fr, ar, ko, pt_BR High-ARPU & High-Spend Regions Premium High-Income Markets
Tier 3 hi, id Mass User Acquisition & Volume Rapidly Scaling Population Volume

Pro-Tip for Flutter Devs

Don't hardcode anything. Even if you only launch in English, set up your l10n.yaml and .arb files on day one. Refactoring a hardcoded app later is a nightmare. By using Flutter's native localization tooling from the start, opening up a new global market down the road is as simple as dropping a new .arb file into your project.

What about you guys? Which languages have given you the best return on investment for your Flutter apps? Did adding RTL support for Arabic or targeting high-ARPU regions like Japan noticeably change your revenue? Let's discuss!


r/FlutterDev • • 1d ago

Example I built an open source office suite using a Swift port of Flutter’s framework

Thumbnail
openoffice.starling.build
0 Upvotes

I just released Starling Office 0.1.0: Writer, Sheets, and Slides, running on Linux, macOS, Windows, and in the browser.

The architecture may interest this community: I ported Flutter’s UI framework to Swift. The native apps use the Flutter engine through a Swift bridge, while the browser builds compile Swift to WebAssembly and render through Skia’s WASM renderer. The application code and UI are shared across both.

Flutter’s widget, layout, and painting model is the foundation here, though the apps are written in Swift rather than Dart.

The suite opens, edits, and saves DOCX, XLSX, and PPTX files. Features include document styles and tables, spreadsheet formulas and charts, and presentation editing with animations and speaker notes.

Built with substantial assistance from Claude. It’s Apache-2.0 licensed and an early 0.1 release, with known limitations documented in the release notes.
Try the browser apps with editable examples:
https://openoffice.starling.build/
Source:
https://github.com/starling-build/starling
Downloads and release notes:
https://github.com/starling-build/starling/releases/tag/office-v0.1.0
I’d welcome feedback from people working with Flutter’s engine, custom embedders, or document-heavy applications.


r/FlutterDev • • 2d ago

Discussion I underestimated how complicated subscriptions are in Flutter

5 Upvotes

When I first started building an app, I was sold on Flutter. It took me less than five minutes to spin up a cross-platform app and start iterating on features.

But that excitement didn't last long.

The more features I added, the more platform support I had to give up due to limitations in existing libraries.

Eventually, I settled on Android and iOS only. At the time, I considered it a big win. One Dart codebase instead of maintaining separate implementations - Kotlin and Swift.

Then I hit a brick wall. Subscriptions!

Selling subscriptions was non-negotiable. I didn't want to build yet another free, ad-supported app that monetizes users by selling their financial data. That was one of my main motivations for building Maxint in the first place.

After going through the tedious process of setting up subscription plans, pricing, and entitlements in each store, I integrated the native IAP libraries for both platforms.

That's when I realized something I probably should have known from the start. The stores don't talk to each other!

A subscription purchased on one platform doesn't magically sync with another. If you want a consistent experience across platforms, you need to build that layer yourself or rely on a third-party service.

If you've built a cross-platform app before, you probably know where this is going.

I did my research and shortlisted a dozen options, eventually narrowing it down to RevenueCat and Adapty.

I initially went with RevenueCat because I wanted to offer bank account linking, an expensive service that required a paid subscription to cover its costs. Around the same time, I built new SDKs that extended bank account linking to desktop and web.

The problem? RevenueCat supported web, but not the full range of platforms I was targeting.

So, I switched to Adapty, which also supported macOS. I even submitted support requests asking about Linux and Windows support, but months went by without a response.

I wasn't ready to give up on making the app available everywhere.

At some point, I asked myself “How hard can it really be to build subscription management for all the platforms Flutter supports?”

Famous last words...

What followed was a painful learning experience. I started building my own subscription orchestration service to handle billing across Flutter platforms.

It turned out to be much more than wrapping a few SDKs.

I had to build an authentication layer, a database to keep store subscriptions in sync, and logic for every edge case I could think of, including and not limited to entitlement management, receipt validation, renewals, webhooks, cancellations, refunds, and subscription state synchronization.

Eventually, I published the SDK on pub.dev and felt a huge sense of relief.

That lasted about five minutes.

User complaints started coming in. Some subscriptions weren't being canceled properly, and I ended up manually canceling subscriptions in individual stores and issuing refunds.

Not exactly the experience I had signed up for. And refunds aren't free of operational costs, either.

Fortunately, those early issues were resolved over time. After months of testing in both development and production, I finally made the service available to other Flutter developers at pub.dev /packages/orca

By then, I had learned firsthand just how much work goes into building and maintaining subscription infrastructure. It's one of those things that looks deceptively simple until you have to handle real users, real money, and all the edge cases that come with them.

There was one more thing I wanted to do differently.

I never liked the idea of subscription infrastructure providers taking a percentage of my revenue. So, I designed Orca's pricing around infrastructure costs rather than a revenue share.

I built it to solve my own problem, but figured other Flutter developers might be running into the same issues.

I'm curious. How are you handling subscriptions across Flutter platforms?

Are you using RevenueCat, Adapty, another service, or rolling your own implementation? And if you're building for desktop and web as well as mobile, how are you dealing with subscription synchronization across stores?

I would love to hear what has and hasn't worked for you.


r/FlutterDev • • 2d ago

Tooling I built Flutterverse

5 Upvotes

A home for the Dart & Flutter ecosystem!

Explore 3,000+ packages, 2,400+ projects, trending repositories, hall of fame, most downloaded plugins, GitHub star growth, and more.

Built with Jaspr ⚡ and is completely open-source!

Try out here: https://flutterverse.org

I’d love to hear your feedback, feature suggestions, and contributions 🤞 !

github: https://github.com/YeLwinOo-Steve/flutterverse


r/FlutterDev • • 2d ago

Tooling Run your flutter app on cloud emulator

1 Upvotes

I recently built a tool to share apk builds with a client so they can test the application. They had only an iPhone and there were a lot of back and forth videos, so i built https://spawndroid.io You can run an android device in under 3 seconds and use your application simply, you can integrate it in your app Ci/Cd and run appium tests. I host the appium server so you just write the tests, verify they work by previewing logs and a video recording.