What we build
We build Flutter apps all the way to a live listing on Google Play and the App Store. The Flutter apps we've shipped include AI features, RevenueCat subscriptions, AdMob ads and Firebase sign-in, so we already know where those parts break.
A typical delivery includes:
- One Flutter codebase (Flutter 3, Dart 3) for Android and iOS.
- The backend: Firebase for sign-in, data and remote settings, or a Python FastAPI service for AI generation and long-running jobs.
- Native Kotlin or Swift modules where Flutter falls short (see below).
- Analytics and crash reporting from the first release.
- Store listings, privacy and data safety forms, signing and the release.
Examples of the kind of app we mean (these are examples, and none is a past project): an AI app that turns a typed request into a finished document, with a free daily allowance and a subscription for unlimited use; a booking app for a salon or tuition centre with reminders and a staff view; a content app with ads for free users and none for subscribers.
Lessons from the Flutter apps we've shipped
AI features
The app never holds the AI provider's key. It calls a backend, and the backend picks the model, so you can switch models without an app update. The app asks for structured JSON and checks every field before showing anything. A generation counts against a user's allowance only after the result has arrived and been saved, so a dropped connection never costs the user a generation.
Subscriptions
We use RevenueCat with one "premium" entitlement, a restore button on the paywall, and the purchase tied to the user's account so it follows them to a new phone. The app waits for the subscription status before deciding anything. We learned that from a bug: a rewarded ad finished loading before the subscription status arrived, and a paying subscriber was asked to "watch an ad to download". Premium is now checked when the ad loads and again at the moment it would show.
Ads
Debug builds only ever request Google's test ads. Google warns that clicking too many live ads outside test mode can get the account "flagged for invalid activity" (AdMob docs, checked 1 November 2026).
Every native ad has a visible "Ad" label and its own background and border. That rule came from an AdMob policy notice about native ads that looked too much like the app's own cards. The native ads policy asks for the text "Ad", "Advertisement" or "Sponsored" on each one, at least 15px, and says ads "must be clearly distinguished from content" (checked 1 November 2026).
Sign-in and release
New users start as guests, and signing in with Google or email links the guest account, so nothing is lost. Account deletion works in the app and from a web page, because Google Play asks for both an in-app path and a web link (Play Console Help). Google Sign-In fails in production until the Play App Signing key's SHA-1 fingerprint is added to Firebase, a detail that can break a first release.
New apps and updates on Google Play must target Android 16 (API level 36) (Play Console Help). Apps that generate content with AI "must contain in-app user reporting or flagging features" (Play policy), so the report button goes in from the start. Both checked 1 November 2026.
Flutter or native code: how we decide
Flutter is the right call when most of your app is screens, forms, payments and calls to a server, which covers most business apps. Native code is needed when the hard part lives in the phone's own media or audio engine, or on a surface Flutter can't draw. We're a Flutter-first studio, so weigh this knowing our preference.
| What your app mostly does |
What we would build |
Examples |
| Screens, accounts, payments, AI calls to a server |
Flutter only |
Booking, marketplace, content and AI generation apps |
| Screens, plus one thing only the platform does well |
Flutter with a small Kotlin or Swift module, or a C library through Dart FFI |
Low-latency audio, a home screen widget, a device API with no maintained plugin |
| Real-time video or audio processing, often on one platform |
Native Kotlin or Swift |
An Android video editor |
Flutter with a little native code
Flutter talks to Kotlin and Swift through platform channels, and to C libraries through dart:ffi. A small real case: to enforce a free allowance per device on Android, one of our apps needed a stable device ID. The id that the popular device_info_plus plugin returns on Android is the firmware build label ("a label like M4-rc20"), shared by every phone of that model and firmware. So the app reads Settings.Secure.ANDROID_ID through a few lines of Kotlin instead.
Home screen widgets are another: "you can't directly draw the UI of a Home Screen widget using the Flutter framework" (Google codelab), so we would write the widget in SwiftUI and Kotlin.
An instrument app: Flutter on a C++ audio engine
A keyboard instrument app we built uses Flutter for every screen, but its sound comes from SoLoud, a C++ engine, through the flutter_soloud package. What that build taught us:
- Never time sound with Dart timers. A 25 ms timer only decides what comes next, and each note is booked on the audio engine's own clock about 220 ms ahead, so the metronome and drone don't drift.
- The default buffer of 2048 frames is too large for a keyboard. Users of the package reported 100 to 500 ms of lag on Android with it, fixed by a smaller buffer (issue #202). The app starts at 512 frames with low-latency output, and a "response speed" setting (256, 512 or 1024) lets a slower phone use a bigger buffer.
- SoLoud plays at most 16 voices at once by default and silences the extra ones (flutter_soloud docs). With keys held over it, the drone was the sound that dropped out. We raised the cap to 64 and marked the drone's voice as protected.
- All notes stop on a phone call or when the app goes to the background, and sound never resumes on its own.
A video editor: fully native Kotlin
When we built an Android video editor, we wrote it in Kotlin on Jetpack Media3 instead of Flutter, because the whole product is the media engine. Media3's CompositionPlayer previews the same composition that Transformer exports, and Transformer runs on Android's hardware codecs and OpenGL (Android docs). When that much of an app lives in Android's media libraries, a Flutter layer adds a bridge without removing any Kotlin. Two lessons from that build:
- The preview could hang after an edit when a music track ended before the video, so every audio track is padded to the project's full length.
- The preview player is released when the app goes to the background, because export and other apps need the hardware codecs, and rebuilt at the same playhead on return.
Our rule: if your app mainly shows screens and talks to a server, choose Flutter. If it processes video or audio in real time, ask which parts will be native before you agree a plan. If it needs fully native builds on both platforms, see mobile app development.
Who it's for
- Founders and product teams in the US, the UK, Europe and the Gulf who want one small team to build and release their app.
- Companies with an Android app that now need iOS, or an existing Flutter app that needs features, a cleanup or a release.
- Startups testing an idea with a first version; MVP development explains how we scope those.
- Businesses in Pakistan, such as shops, restaurants, schools and logistics companies, that want an app for customers or staff.
Hire Flutter developers by the month
If you already have a Flutter app and need more hands on it, you can hire our Flutter developers on a monthly retainer instead of a fixed-scope build. The same engineers work on your app every month, in your repository and your issue tracker, and join your calls in the hours that overlap with yours. The work is what a Flutter app needs after launch: new features, upgrades to new Flutter and SDK versions, store releases and fixes. Everything we write stays in your repository. For a wider team that also covers web, backend or AI work, see hiring developers in Pakistan.
How a project runs
- Scope call. One call to understand the problem and check we're the right team. Bring who the users are, how the app makes money and any deadline.
- Fixed written plan. A written scope with milestones, price and dates, agreed before any code is written.
- Weekly builds you can try. Every week you get a version on your own phone: Android through Google Play's internal testing track, iOS through TestFlight. If something feels wrong, you find out within a week, while it's still a small change.
- Release. Store listings, privacy and data safety forms, the closed test where Google requires one, review and a staged rollout.
- Handover. The code, accounts and keys, with documentation on how to build, how to release and where each setting lives.
Already have a finished app? Our launch and store setup work covers signing, listings, review and release on its own. To keep shipping after launch, the monthly product retainer keeps the same engineers on your app.
What you own
You own the code, the store accounts and the cloud accounts from day one:
- The code lives in a repository under your account.
- The Google Play and Apple developer accounts are in your name or your company's. Google charges a one-time US$25 fee (Play Console Help) and Apple 99 USD per membership year (Apple), both checked 1 November 2026.
- Firebase, RevenueCat, AdMob and hosting sit in accounts you control, with us added as members while we work.
- Signing keys, passwords and server-side API keys are handed over with the documentation.
To publish under a company name, both stores ask organisation accounts for a D-U-N-S number (Google, Apple), so start that early. Your written agreement sets out ownership in full; this page is a summary, not legal advice.
- App: Flutter and Dart, with Kotlin and Swift for native modules.
- Backend and data: Firebase (Authentication, Firestore, Remote Config, Analytics, Crashlytics) or Supabase on PostgreSQL.
- AI and long jobs: Python with FastAPI, Node.js where it fits, and the OpenAI and Claude APIs.
- Revenue: RevenueCat for subscriptions, AdMob for ads.
- Hosting: Cloudflare, AWS and Docker.
- Around the app: n8n for jobs such as sending new sign-ups to your CRM (workflow automation).
Timelines
Your written plan gives real dates for each milestone once we've seen the scope. A tightly scoped first version is built in weeks.
What moves the date: each extra kind of user (customer, staff, admin), AI features tested on real inputs, subscriptions on both platforms, native modules tested on real devices, and how quickly your side tries each weekly build.
Two store steps nobody can speed up:
- A personal Google Play account created after 13 November 2023 must run a closed test with at least 12 testers opted in for 14 days in a row, and the production review "usually takes seven days or less" (Play Console Help, checked 1 November 2026). Plan about 3 weeks (14 days of testing, then a review that usually takes up to 7), so we start the closed test as soon as a usable build exists.
- Apple typically reviews "at least 50% of submissions in less than 24 hours and 90% in less than 48 hours" (Apple, checked 1 November 2026).
Working with us from abroad
Pakistan Standard Time is UTC+5 all year, with no daylight saving (PKT). Our hours are Monday to Friday, 10am to 7pm PKT (05:00 to 14:00 UTC). Against a 9am to 5pm day:
| Where you are |
Our hours in your winter time |
Overlap in winter |
Overlap in summer time |
| London |
5am to 2pm |
5 hours |
6 hours |
| Berlin, Paris |
6am to 3pm |
6 hours |
7 hours |
| Dubai |
9am to 6pm |
Full day |
Full day (no clock change) |
| Riyadh |
8am to 5pm |
Full day |
Full day (no clock change) |
| New York |
Midnight to 9am |
None |
1 hour |
For US clients we also take calls from 6pm to 10pm PKT (13:00 to 17:00 UTC), Monday to Friday. In New York that's 8am to 12pm in winter (EST) and 9am to 1pm in summer (EDT).
The Gulf gets a full shared day, the UK and Europe most of one. With the US, live calls and urgent replies happen in your morning, through that 6pm to 10pm PKT window, alongside the weekly build and a short written update. If you need live calls outside that window, say so on the scope call and we'll tell you whether we can do it.
We reply to email and the contact form within one business day, and we're on WhatsApp at +92 308 6475141. The people on the calls write the code. For a team on your product month to month, see hire developers in Pakistan.
When we're not the right fit
- You need a large team quickly. We stay small on purpose.
- Your app would be your website in a wrapper. Apple's App Review page says "websites served in an iOS app" do "not make a quality app", and a fast website may serve you better (web development).
- Your app is a 3D game. A game engine such as Unity suits that better than Flutter.
- You need a supplier with formal security or quality certifications. We don't hold any.
- You need a brand-new app live on Google Play in under 3 weeks from a new personal developer account. The 14-day closed test plus the production review leave almost no time to build it, whoever does the work.
Frequently asked questions
How much does a Flutter app cost?
We don't publish a price list. After the scope call you get a fixed written plan with the price and dates for each milestone. Cost moves with the same things as the timeline. On top of the build, budget for the store fees above and the running costs of the services in your accounts, such as Firebase and AI usage.
Will a Flutter app feel like a proper Android or iOS app?
For most business apps, yes. Flutter draws its own interface, and where the phone's own frameworks do the work, such as widgets or real-time media, we write that part natively.
Flutter or React Native?
Both ship good apps. We recommend Flutter for new apps because that is where our depth is. If your team writes React and will maintain the app itself, React Native may suit you better, and it's in our stack too.
Can you take over our existing Flutter app?
Yes. We read the code, run the analyzer and existing tests for a baseline, and follow the patterns already there instead of rewriting. Each bug we fix is reproduced from the logs first and gets a test named after it.
Can you add AI features to an app we already have?
Yes, through a backend, so the provider key never ships inside the app. For chatbots that answer from your own documents, see AI chatbot development.
How quickly do you reply?
Within one business day, Monday to Friday, 10am to 7pm PKT (UTC+5). Tell us what you're building and we'll start with the scope call.