Flutter or native: trade-offs for a business app

When one Flutter codebase is the right choice for a business app, when native Swift and Kotlin are worth the extra cost, and how the two combine.

InvoSpec SoftwaresPublished 3 min read

There are two honest ways to build an app for both iPhone and Android. Build it twice, natively, in Apple's and Google's own languages. Or build it once with a cross-platform toolkit such as Flutter, which compiles to native code for both. We use Flutter for most of our mobile work, and native code where it earns its place. This guide explains how we decide, so you can check the decision yourself.

What "native" and "Flutter" mean here

Native means two separate apps: one written in Swift for iOS, one in Kotlin for Android. Each uses its platform's own screen components and has first access to every platform feature on the day it is released.

Flutter means one app, written once in Dart, that Flutter compiles into native code for each platform. It draws its own screens, so they look identical on both, and it reaches platform features through plugins. Where no plugin exists, a small piece of native code can be written and called from the Flutter app; Flutter's documentation calls these platform channels.

Where one codebase wins

Cost to build. One team builds one app. Most of the work, from the screens to the logic to the tests, is done once.

Cost to maintain. This is the larger saving over an app's life. Every change, fix and store deadline is handled once. Two native apps means two of everything, forever, and they drift apart unless someone works to stop it.

Consistency. The same screens, behaviour and bugs on both platforms. For a business app that staff use on mixed devices, this is a feature in itself.

Speed of change. One change, one test, one release to both stores.

For most business apps, bookings, deliveries, field work, internal tools and many consumer products, these outweigh everything in the next section.

Where native earns its cost

Deep platform features on day one. New capabilities arrive in iOS and Android first and reach Flutter plugins later. If your product's reason to exist is a brand-new platform feature, native gets you there first.

Heavy use of one platform's own look. If the app must feel exactly like a first-party Apple or Google app, down to each control, native does it with no effort and Flutter does it with some.

Specialised hardware and media work. Demanding camera pipelines, audio processing, certain Bluetooth devices and some payment terminals have better native kits than Flutter plugins. This is usually a part of an app, not the whole app, which brings us to the third option.

An existing native team. If you already employ Swift and Kotlin engineers, keeping them productive matters more than the toolkit.

The usual answer: Flutter, with native where needed

Most of our apps are Flutter with a few native pieces. The booking screens, the order flow, the staff lists and the sync logic are Flutter, written once. The one feature that needs a specific card reader, a background location service with particular rules, or a platform-only API is written natively for each platform and connected through a platform channel.

That gives one codebase for the ninety percent that is ordinary, and native code for the part that is not, without paying for two whole apps.

Questions that decide it for your project

  1. Is there a feature only one platform can do, and is it the reason the app exists?
  2. Must the app match the platform's first-party look exactly, or just be clear and quick?
  3. Does any part depend on specialised hardware with a native-only kit?
  4. Who will maintain it in three years, and how many apps do you want them maintaining?
  5. Do you need both platforms at launch, or one now and one later?

If the answers are "no, no, maybe one part, as few as possible, both", build it once in Flutter and write the one part natively. If the answers are mostly "yes", talk to us about native, and we will say so if it is the right call.

Common questions

Do Flutter apps look and feel like real apps?
Yes. Flutter draws its own screens rather than wrapping a web page, and compiles to native code on each platform. Users cannot tell by using it. Where it differs is in the few places that depend on platform-specific behaviour, which is what the rest of this guide is about.
Can we switch from Flutter to native later, or the other way?
The screens would be rebuilt; the backend, the accounts, the data and the store listings carry on unchanged. In practice the switch is rare. The more common path is adding small native pieces to a Flutter app for a specific feature.
Is Flutter a safe long-term choice?
It is maintained by Google, open source, and in wide use for consumer and business apps. Like any technology it needs keeping up to date, which is part of normal maintenance. The risk to plan for is not Flutter disappearing; it is an app of any kind being left without updates.

Sources

Next step

Tell us what you are weighing up.

An engineer reads every message and replies within one business day with the first questions we would ask. No sales call first.

No spam, no sales follow-up pressure. NDA available on request.