It has been over a year since What’s Revolutionary about Flutter was published (it is still a good introduction). When I wrote that article, few mobile developers had heard about Flutter, but things have come a long way since then. Now I can’t keep up with all the articles and videos being created about Flutter by an active, vibrant, even exploding community. Developers have discovered Flutter, and they love it. Here’s an animated GIF of just one of the wonderful apps created using Flutter, by Reflectly:

Reflectly intelligent journaling Flutter app

Developers often tell me that one of their biggest challenges now is convincing their company management — or if they are an agency or freelancer, convincing their clients — to try Flutter. These decision-makers are not as eager to adopt the latest technology, just for technology’s sake. They are typically tech savvy, but that is not their only concern. They want to know if using something new will help their company succeed; for example, by bringing in new customers or reducing risks.

This article is aimed at two groups:

Developers who want to help their management understand why they should use Flutter. Even if a developer is familiar with Flutter, they still need solid arguments to present to management.

Developers who want to decide for themselves whether to develop a product with Flutter.

This article will also discuss reasons why a specific mobile app might not be a good target for Flutter, so an informed decision can be made.

What is Flutter?

The tagline for Flutter (kind of a written elevator pitch) is

Build beautiful native apps in record time

Let’s break this tagline up into four parts and discuss them one by one:

Build Beautiful Native apps In record time

1. Build

Flutter is currently focused on building mobile apps for iOS and Android.

However, there is a larger, longer-term vision that sets Flutter apart from current mobile frameworks: Flutter is not just a framework, it is a complete SDK for building apps that interact using a screen. That means that Flutter contains everything needed to create a user interface, including the renderer and the things to be rendered (which Flutter calls widgets).

In many ways, Flutter is similar to game engines such as Unity or Unreal, which also supply their own renderer and the things to be rendered (and other software). But instead of building games, Flutter builds apps.

The fact that Flutter is a complete SDK means that it can be ported to run on virtually any hardware that includes a display. The Flutter renderer uses Skia, a popular open-source graphics engine that is easy to use on different devices.

Flutter on desktop and Raspberry Pi

While at Google we have been focused on mobile apps, various third parties have done ports of Flutter to desktop computers (macOS shown at left, Windows, Linux, and others), to TVs (here’s a video of Flutter running on an Nvidia Shield TV), and to the Raspberry Pi (shown at bottom left). Internally, Flutter is also used to build user interfaces for Fuchsia.

Increasingly, apps will expand beyond mobile phones. It will be common to access apps across multiple devices, including home assistants (Google Home Hub, Lenovo Smart Display, etc.), interactive displays in cars, home appliances (refrigerators), wearables (watches, clothing), and other IoT devices. In 2017 there were 8.4 billion such devices online. By 2020 (less than two years from now) IDC estimates that there will be over 30 billion (compared to 5 billion mobile phones). Many of these devices will have interactive screens. Flutter’s architecture has all the ingredients to create powerful and beautiful user interfaces for these new devices.

Screens everywhere!

And of course, Flutter is completely free and open source.

2. Beautiful

How can you ensure the mobile app you are creating will succeed when it is competing against 3.8 million apps in the Google Play Store and 2 million apps in the Apple App Store? Even if you manage to convince a user to download your app, there is only a 3% chance that they will be actively using it 30 days later. Gartner Inc. says that only 0.01% of all published mobile apps become a financial success. Developers need all the help they can get.

Alibaba (left) and Topline (right)

2Dimensions

Studies have shown that having an appealing design can be very important. If you look at the most popular mobile apps from the last few years, they each have their own design aesthetic. In addition, beautiful apps win awards, which provides valuable publicity.

As just a few examples, the Flutter apps shown to the left include apps from Alibaba (the largest e-commerce company in the world), the Topline recording app from Abbey Road Studios, and a demo app of amazing realtime animations from 2Dimensions.

Increasingly, companies want their mobile apps to complement their company branding, just like they do for their website and web apps. This requires a high degree of customization.

Finally, designers often have great ideas that — by the time they are implemented — are badly watered down because of toolkit limitations. Flutter helps you say yes to your designer to build apps that implement their vision.

You can see more Flutter apps in the Flutter showcase (and hundreds more on the It’s All Widgets site). This includes the beautiful Reflectly journaling app, shown at the beginning of this article using an animated GIF, but you should install it from the app stores onto your Android or Apple phone. Be sure to read about their experiences switching their app to Flutter.

3. Native apps

Mobile developers might be surprised by this point. In the world of mobile apps, the term “native app” is often used to refer to an app that targets platform APIs directly using specific languages. And just to make things more confusing, frameworks like React Native and Xamarin use the term “native” to mean that they can use the platform widgets.

Other areas of computing don’t really use the term “native” as it is used in mobile. For example, you can install Linux on either Windows and macOS computers (and many other kinds), but you wouldn’t call Windows or macOS “native” and Linux a “cross-platform” or “hybrid” solution. People consider Linux just as native as Windows or macOS, because it is.

A more precise definition of “native” for computing is:

“Designed for or built into a given system, especially denoting the language associated with a given processor, computer, or compiler, and programs written in it.”

Flutter apps are compiled to native machine (ARM) code on both iOS and Android.

The advantages of native apps are plentiful. Native apps start up faster, and most importantly they are smoother and less likely to suffer from jerkiness or stutter (jank is not beautiful). Native apps also give the developer more control over the behavior of their app.

In order to receive the advantages of native apps, mobile developers have typically built two separate apps using separate tools and languages. Often, this means having distinct teams of developers for each platform, who then have to coordinate with each other. This raises costs significantly, increases risks, and slows the time to market. Flutter allows developers to consolidate into a single codebase, unify their development teams, reduce risk, and speed time-to-market. All while getting the benefits of a native app.

Which one is “native”? Both!

What about the widgets? Because Flutter provides its own widgets, you might be afraid that Flutter apps will look or feel uncannily different than apps developed using the platform widgets and tools.

To the left, the iOS platform settings screen is compared to the same screen created using Flutter. Even though there are a few small differences at the pixel level, the bottom line is that Flutter makes it easy to create screens that look and feel like platform screens.

Because platforms change between different OS versions, even a platform native app will typically look different on distinct versions of an OS. It is virtually meaningless for Flutter to try to be “pixel perfect”.

Flutter’s widgets adapt to the platform they are running on to provide the proper look and feel, including icons, colors, layout, fonts, scrolling behavior, and so forth. Instead of being “pixel perfect” a more important goal for a Flutter app is to conform to the design guidelines for the platform, and to feel familiar and comfortable to the user.

The high platform fidelity of Flutter apps is possible because Flutter is a complete SDK that renders directly to the platform canvas. Your app does not depend on the platform’s widgets, fonts, etc. that might change out from underneath it.

Flutter also avoids the need for compatibility libraries. For example, here is a Flutter app that uses Material Design widgets, on a phone running Android Jelly Bean (4.1.2). This phone came out two years before Material Design was even created, so the phone has no built-in widgets for Material Design at all. But your Flutter app will run the same as it does on a more modern phone with a more recent OS, and look great.

Without Flutter, you would have to deal with these problems yourself. This means more testing on older versions of the OS, and workarounds for platforms that don’t provide features that your app uses. Developers tell us that testing is dramatically easier using Flutter.

In summary, Flutter not only provides the advantages of native apps, it provides additional important benefits:

Flutter apps will run on older versions of each platform OS. For example, if you, the developer, test your Flutter app on a recent version of Android, it will look the same on older versions. This allows Flutter apps to run well on older phones, with far less testing.

New releases of the platform OS will also never break your app, unless a change breaks something on which Flutter depends (this is extremely rare, and would be a bug in Flutter, not in your app).

Your app will not look dramatically different because of modifications made to the OS made by manufacturers or carriers (a common example is changes to the default fonts).

Most importantly, Flutter gives you, the developer, complete control over what your app looks like, down to the pixel, on all platforms and versions.

If desired, you can explicitly make a Flutter app look different on iOS and Android. Even if you don’t do this, the Flutter widgets adapt to the design guidelines for each platform.

Flutter can do this using a single codebase for both platforms. Or you can add platform native code for each platform to a Flutter app, if desired.

4. In record time

Last, but certainly not least, Flutter lets you develop better apps faster. The most popular (and even hyped) feature of Flutter is its stateful hot reload. Not only is it amazingly fast (usually sub-second), it is stateful, which means if you change some code deep down in your app, after you recompile you don’t have to navigate back into the same place or manually recreate your state in order to see the effect of the change.