Mobile App Development

Food Delivery Courier App

A Flutter courier app with live tracking, batched drops and earnings that couriers can actually check.

View live demo Opens a working demo with sample content in a new tab.
Swift Kitchen demo on desktop and phone

On location

  • Scooter Motorbike — Swift Kitchen
    Scooter MotorbikePhoto: Skitter Photo (CC0)
  • Cycling City — Swift Kitchen
    Cycling CityPhoto: Burst (CC0)
  • Pizza Food — Swift Kitchen
    Pizza FoodPhoto: Krzysztof Puszczyński (CC0)
  • Noodles Soup — Swift Kitchen
    Noodles SoupPhoto: Krzysztof Puszczyński (CC0)
  • Ramen Noodles — Swift Kitchen
    Ramen NoodlesPhoto: Foodie Girl (CC0)

About the Project

This case study describes a food delivery courier app built in Flutter for a city delivery operator. Couriers needed one dependable tool for the whole shift: accept orders, collect food from restaurant kitchens, follow multi-drop routes and confirm deliveries — while customers watched their order move across the map in real time.

The previous setup leaned on voice instructions for batched deliveries, lost status updates whenever a courier rode through a signal dead spot, and gave couriers little visibility of what each delivery had earned. The new app tracks location reliably with the phone in a bag, queues every event offline until signal returns, sequences batched pick-ups and drops clearly and shows a per-delivery earnings breakdown during the shift.

About the Client

The client operates a food delivery platform in a busy city, connecting local restaurants with customers through a fleet of self-employed couriers on bikes and scooters. Evening peaks are intense: kitchens release orders in waves, and a single courier may carry several orders on one route.

Two audiences depend on the courier app without ever opening it. Customers judge the service by the live tracking screen and the temperature of their food, and the operations team needs accurate statuses to assign work, answer queries and pay couriers fairly.

Project Goals

  • Give customers a live, trustworthy view of where their order is.
  • Keep tracking accurate with the screen off and the phone in a pocket or bag, without draining the battery.
  • Never lose a pick-up or drop-off status because of poor signal.
  • Replace voice-dispatched batches with clear, in-app multi-drop routes.
  • Show couriers exactly what each delivery earns, during the shift rather than at the end of the week.

Project Overview

The Challenge and Our Solution

The Challenge

Couriers worked from a group chat and a web page that logged them out on every dead spot, so the operator could not tell customers where an order actually was. Batched drops were assigned verbally, earnings were queried constantly, and turnover among riders was high because nobody trusted the numbers.

Our Solution

We built one Flutter app for Android and iPhone with background location that survives the phone sleeping in a bag, offline queuing so a tunnel does not lose a status update, and a clear batching view showing pick-up and drop order. Customers see live courier position for the duration of the delivery only. Earnings are itemised per delivery — base, distance, tip — and visible during the shift rather than at the end of the week.

Background Location That Survives a Courier's Shift

Live tracking only works if location updates keep flowing when the courier is not looking at the phone. The app uses background geolocation tuned for riding: it reports frequently while moving and backs off when stationary at a restaurant or a door, which keeps the customer's map smooth while protecting battery life over a long evening.

Positions are sent to the operator's systems and on to the customer's tracking screen, so the question "where is my order?" is answered before it is asked. Fewer customers needed to contact support once live tracking was in place.

  • Reliable updates with the screen off
  • Movement-aware sampling to save battery
  • Live position shared with the customer

Offline-First Status Updates

Cities are full of signal shadows — basements, stairwells, tunnels and tall buildings. Every pick-up and drop-off event is written to a local SQLite queue first and uploaded as soon as the connection returns, in the order it happened.

Couriers no longer have to tap a button repeatedly hoping it registers, and the operations team no longer sees orders stuck in the wrong state because an update vanished between floors. The record of each delivery is complete even when the network was not.

Batched Delivery Routing Without the Phone Calls

Multi-order routes used to be explained by voice. In the new flow, batched deliveries are assigned inside the app with a clear pick-up order and drop sequence, and each stop opens navigation through the Google Maps SDK. Couriers can see the whole route at a glance and work through it stop by stop.

Because the sequence lives in the app, it is consistent for every courier and visible to dispatch, which makes batching something the operator can plan rather than improvise.

  • Clear pick-up and drop-off order
  • Per-stop navigation
  • Batches assigned in-app instead of by voice

Earnings Couriers Can Actually Check

Each completed delivery shows a breakdown of base pay, distance and tips while the shift is still running. Couriers can see how the evening is going and check any delivery that looks wrong, instead of waiting for a weekly statement to reconcile from memory.

Couriers cited that transparency as a reason for staying on the platform — a meaningful outcome for an operator competing with others for the same pool of riders.

Our Process

How We Delivered It

  1. Ride-Alongs and Shift Research

    We followed couriers through real shifts to see where signal dropped, how phones were carried and where the old flow broke down.

  2. Flutter Architecture

    A single Flutter codebase with Riverpod state management, a local SQLite queue and clear boundaries between tracking, orders and earnings.

  3. Tracking and Battery Tuning

    Background geolocation settings were tested on a range of Android and iPhone devices to balance accuracy against battery life.

  4. Courier Beta

    A group of couriers used the app on live shifts, feeding back on batching screens, notifications and earnings before wider rollout.

  5. Fleet Rollout

    The app was rolled out across the fleet with Firebase Cloud Messaging for order alerts and monitoring of status-queue behaviour in the field.

Key Features

What We Delivered

  • Background location

    Reliable tracking with the screen off and the phone in a bag, tuned for battery life.

  • Offline status queue

    Pick-up and drop-off events queue locally and upload as soon as signal returns.

  • Batched delivery flow

    Multi-order routes with clear pick-up and drop sequencing and per-stop navigation.

  • Transparent earnings

    Per-delivery breakdown of base, distance and tips, visible during the shift.

Outcome

Results and Impact

  • Customer "where is my order" contacts reduced by live tracking.
  • Status updates no longer lost in signal dead spots, thanks to offline queuing.
  • Batched deliveries assigned in the app rather than by voice.
  • Earnings transparency cited by couriers as a reason for staying on the platform.

Client Feedback

What the Client Says

★★★★

Couriers can see what they have earned during the shift, not a week later. Retention improved, which was the number we actually cared about. Customers stopped calling to ask where their order was, which was the number our support team cared about.

Fleet ManagerCity food delivery operator

Services

Services Behind This Project

The Flutter App, Mobile App, Firebase expertise we used to build this mobile app development — and can bring to yours.

  • Flutter App Development

    Beautiful, fast Flutter apps written in Dart that run natively on Android and iPhone — and on the web — from a single codebase.

  • Mobile App Development

    High-performance Android and iPhone apps built with Flutter, Dart, Kotlin and Swift — from idea and UI/UX design to Google Play and App Store launch.

  • Firebase Development

    Web and mobile backends on Firebase — sign-in, Firestore data, Cloud Functions, push notifications and hosting — built with security rules and cost control from day one.

FAQ

Frequently Asked Questions

Why Flutter for a food delivery courier app?

Couriers use a mix of Android phones and iPhones, so one Flutter codebase delivers both apps with the same features and release cadence. Flutter also gave us fine control over a busy, glanceable interface, while native plugins handle background location, maps and push notifications.

Does background location tracking drain the battery?

It can if it is configured naively. We tune sampling to movement, reporting frequently while riding and backing off at restaurants and doors, and test on real devices across long shifts. The aim is a smooth customer map without couriers needing to charge mid-shift.

What happens if a courier loses signal?

Pick-up and drop-off events are saved to a local queue on the phone first and uploaded automatically, in order, when the connection returns. Nothing is lost, and the courier does not need to repeat any action.

Can the app support batched or multi-drop deliveries?

Yes. Batched orders are assigned in the app with a clear pick-up order and drop sequence, and each stop opens turn-by-turn navigation. The routing rules — how many orders, which restaurants and areas — can be tuned to the operator's model.

Can it integrate with our existing dispatch and payments systems?

The app talks to the operator's back end through REST APIs, so it can sit alongside existing order management, dispatch and payout systems. Earnings breakdowns come from the same source the operator uses to pay couriers, so the numbers always agree.

How long does a courier app like this take to build?

It depends on the features, the systems to integrate and how much field testing is needed. A focused first release covering orders, tracking, offline queuing and earnings is typically a matter of months rather than weeks; we agree milestones after a short discovery phase with your operations team and couriers.

Similar Work

Related Projects

Case studies built with the same technologies or for similar needs.

  • School Books — Meadowbrook Trust
    • Flutter
    • Dart
    • BLoC

    Mobile App Development

    School Parent Communication App

    A Flutter app for 14 schools covering attendance, trip consent, payments and teacher messaging.

  • Girl Gym — Ironhouse Training
    • Android
    • iOS
    • Flutter

    Mobile App Development

    Gym Training App – Daily Workouts & Morning Check-ins

    An Android and iPhone app that schedules each day’s training course and checks in with trainees every morning on the previous day’s session.

  • Senior Couple — Willow Care
    • Ionic
    • Capacitor
    • Angular

    Hybrid App Development

    Home Care Visit Logging App

    An Ionic and Capacitor app built from the provider’s existing Angular system, in the stores in seven weeks.

  • Barista Latte — Mill Street Coffee
    • React Native
    • TypeScript
    • React Navigation

    Mobile App Development

    Coffee Chain Loyalty & Order-Ahead App

    A React Native app for Android and iPhone with stamps, order-ahead and push offers across 34 stores.

  • Soccer Ball — Northgate Leagues
    • Flutter
    • Firebase Authentication
    • Cloud Firestore

    Mobile App Development

    Community Sports League App on Firebase

    Fixtures, live scores, team chat and sign-ups for 9,000 players — built on Firebase so a volunteer-run league has no servers to look after.

  • Shop Store — ShopEase
    • PHP
    • MySQL
    • JavaScript

    eCommerce Development

    ShopEase – Modern eCommerce Platform

    A feature-rich online fashion store with a seamless shopping experience, powerful admin management and secure transactions.

Let’s Connect

Want Results Like These?

Share your project details and our experts will get back to you within one business day with the best solution — free consultation, no obligation.