The Flutter Kit logoThe Flutter Kit
Boilerplate · On-Demand

Flutter On-Demand App Boilerplate

The account, request/booking, payment, and push core that every on-demand service app reuses — rides, home services, errands — wired in BLoC across iOS, Android, and Web so you build the vertical, not the plumbing.

Last updated: 2026-06-19 7 min read By Ahmed Gagan, Flutter Engineer
Quick Answer

This Flutter on-demand app boilerplate is a $69 one-time Flutter (Dart) starter for the shared core behind any on-demand service: accounts, a request/booking lifecycle, a payment layer, and push notifications. Whether you are building rides, home services, or errands, the same account + request + payment + push spine repeats — and this kit ships it, wired in BLoC with get_it. You own the full source, target iOS, Android, and Web from one codebase, and get lifetime updates. It is the reusable foundation; the matching, dispatch, and vertical-specific logic are yours to build.

Price
$69 one-time (was $149)
Core
Account + request/booking + payment + push
Request flow
Streamable lifecycle (requested → accepted → done)
Platforms
iOS, Android, Web from one Dart codebase

Every on-demand app is the same four pieces

Strip away the branding and a rideshare, a home-cleaning app, and a dog-walking app share one spine: a user with an account, a request they create, a payment that settles it, and push notifications that keep both sides informed. The Flutter Kit ships that spine so you don't rebuild it per vertical. Firebase Auth handles accounts (including role-aware buyer/provider context), a request lifecycle is modeled as streamable Firestore documents, RevenueCat covers the digital monetization layer, and FCM handles the notifications. It all lives in BLoC/Cubit with get_it, so the reusable core is testable and your vertical logic plugs into clean seams.

  • Accounts with optional requester/provider roles
  • Request lifecycle: requested → accepted → in-progress → completed
  • Real-time status via streamable Firestore documents
  • FCM push so both sides see updates the moment they happen

The request lifecycle, concretely

The heart of an on-demand app is a request that two parties watch change. The kit models it as a Firestore document with an explicit status, exposed as a stream a Cubit subscribes to — so when a provider accepts, the requester's screen updates live, and when the job completes, both sides transition together. This is the same plumbing for a ride being accepted, a cleaner being dispatched, or an errand being claimed; only the fields differ. Because it is behind a repository in get_it, your dispatch logic (a Cloud Function, a backend matcher) writes to the same document the app already streams.

A streamable on-demand request lifecycle
class RequestCubit extends Cubit<RequestState> {
  RequestCubit(this._repo) : super(const RequestIdle());
  final RequestRepository _repo;
  StreamSubscription? _sub;

  Future<void> create(ServiceRequest req) async {
    final id = await _repo.submit(req); // status: requested
    _sub = _repo.watch(id).listen((r) {
      emit(RequestUpdated(r)); // accepted -> inProgress -> completed
    });
  }

  @override
  Future<void> close() { _sub?.cancel(); return super.close(); }
}

Payments and push for the on-demand model

On-demand apps have two money paths, and it helps to be precise. RevenueCat — wired here with trials, restore, and entitlements — is the right tool for digital monetization: a membership, a priority tier, or unlocking premium service, all StoreKit 2 / Play Billing compliant. Paying a provider for a real-world service (a ride, a cleaning) is an external-processor transaction the stores permit; the kit gives you the request, account, and entitlement structure to attach that processor. On the notification side, FCM and local notifications are wired with a diagnostics screen, so 'your provider is on the way' and 'job complete' pushes are about triggering, not plumbing.

  • RevenueCat for memberships, priority tiers, premium unlocks
  • Real-world service payments via an external processor you connect
  • FCM push for accept/dispatch/complete events on both sides
  • Material 3 design tokens — rebrand the whole app from one file

When a different starting point is the honest choice

On-demand businesses live or die on supply-side logistics — matching, routing, dispatch, surge — and most of that value is in your backend, not any front-end starter; a boilerplate gives you the client core, not the marketplace dynamics. If your specific vertical already has a tighter-fitting template (a pure food-delivery or booking starter), begin there instead of the generic core. If you have no Dart experience and need to test demand with a concierge MVP, a no-code tool or even manual coordination may validate the idea before you build an app at all. The Flutter Kit's on-demand base is the right call when you want a code-first service app you fully own, with the account + request + payment + push core already wired so you can pour your effort into the matching and the market.

The Flutter Kit vs building an on-demand core yourself

The Flutter Kit vs Build from scratch comparison
FeatureThe Flutter KitBuild from scratch
Price$69 one-time, unlimited projectsYour engineering time (weeks)
Accounts & rolesRole-aware Firebase Auth wiredDesign and build role plumbing
Request lifecycleStreamable Firestore documentsHand-roll state machine + streams
Real-time updatesCubit subscribes to live statusBuild sync + reconnection logic
PaymentsRevenueCat for digital tiersWire StoreKit 2 + Play Billing
PushFCM + local notifications wiredBuild the full FCM flow
Source ownershipFull source, lifetime updatesYou own and maintain it all

Frequently Asked Questions

What exactly does the on-demand boilerplate give me that's reusable across verticals?
The shared spine: accounts (with optional requester/provider roles), a streamable request/booking lifecycle, a RevenueCat payment layer for digital tiers, and FCM push. A rideshare, a home-services app, and an errand app all reuse that core — only the request fields and your matching logic differ.
How does the on-demand boilerplate keep both sides of a request in sync?
A request is a Firestore document with an explicit status, exposed as a stream that a Cubit subscribes to. When a provider accepts or completes the job, both the requester's and provider's screens update live, because they are watching the same document that your dispatch logic writes to.
Can I charge for a real-world service in an on-demand app built on this kit?
Yes, with the right tool for each path: RevenueCat handles digital monetization like a membership or priority tier through StoreKit 2 and Play Billing, while paying a provider for a real-world service is an external-processor transaction the stores allow. The kit gives you the request and account structure to attach that processor.
Does the on-demand boilerplate include driver matching and dispatch?
No — matching and dispatch are your business's core differentiator and live mostly in the backend, so the kit deliberately leaves them to you. It provides the client-side request lifecycle and a Firestore document your matcher (a Cloud Function or backend service) writes to, so dispatch results flow straight to the app.
Should I use the on-demand boilerplate or a vertical-specific starter like food delivery?
Use the on-demand core when your vertical doesn't have a tighter-fitting starter, or when you want the generic account + request + payment + push spine. If you are specifically building food delivery or appointment booking, those dedicated boilerplates fit closer out of the box while sharing the same architecture.
Can an on-demand app built on this kit run on web for an admin or web request flow?
Yes — one Flutter/Dart codebase covers iOS, Android, and Web, so a web request page or a lightweight provider dashboard shares the same account, request, and payment logic as the apps. You maintain one codebase across all three surfaces.

Keep exploring

Reuse the on-demand core, build your vertical

Start with the account, request/booking, payment, and push core every on-demand app shares — wired in BLoC. $69 one-time, full source, lifetime updates, iOS + Android + Web from one Dart codebase. See /features.

Get The Flutter Kit — $69

One-time purchase · Lifetime updates · Unlimited projects