Flutter is the only choice for mobile development

Greg Whitescarver

3rd July, 2019

Flutter is the only choice for mobile development

You've heard of React Native, perhaps. It's the most popular way to create apps that are cross-platform between iOS and Android, and it leverages JavaScript. And then there's Xamarin, from Microsoft, which works similarly but uses the .Net development framework.

If you're familiar with React Native or Xamarin projects, then you're probably familiar with some of the common frustrations: UI features don't always behave the same way across platforms. "Build it once" is often far from true: if you want custom UI elements (and who doesn't?), you wind up writing code in iOS and Android platform languages like Objective C, Swift, Java, or Kotlin.

So you set out to have "one language to rule them all," but you wound up having to develop lots of code in three different languages.

Enter Flutter.

Flutter is a general-purpose user interface development framework and toolkit. Based on the modern and expressive Dart language, Flutter offers blissfully fast development, compiles to native instructions, and provides very snappy performance.

The old way

React Native and Xamarin rely heavily on OS-provided user interface features. That means any app built using either framework will necessarily be different on the different platforms. It also means you’ll have a lot of iOS-specific and Android-specific code to create anything bespoke. If React Native or Xamarin were to add support for additional operating systems, those frameworks would grow in complexity because React Native and Xamarin are not general-purpose user interface frameworks. Your UI development effort, therefore, will increase linearly for each platform you decide to support using React Native or Xamarin.

Why “general purpose” matters so much

Flutter, on the other hand, implements the user interface from the ground up. That might sound like a lot more work, but it means that you can run any user interface your heart desires—on either iOS and Android—with native performance. Flutter already has mature widget implementations in the styles of iOS (Cupertino) and Android (Material). If you want to, you can run the Cupertino widgets on both Android and iOS...or you could run Material on both. And if you don’t like either style, you can implement your own widgets.

The strategic advantage of Flutter

As a general purpose UI framework, Flutter allows you to build a single application that is portable to platforms beyond Android and iOS, including ones that haven’t even been released yet. Flutter for web is in preview release, and there’s no reason Flutter won’t be able to compile to WebAssembly when it’s ready. People are already deploying Flutter apps to the desktop. Flutter is the UI development platform for Android’s ordained successor, Fuchsia, which is meant to run on both mobile and desktop.

So what's next?

The next time you kick off a mobile development project...well first of all don't you dare create it for iOS only. iOS hasn't had a majority of smartphone market share in the US for quite some time; and in the rest of the world Android completely dominates.

You could write separate apps for iOS and Android using the platform languages, as many great apps do. Arguably, writing separate apps is a surer way to on-brand quality than React Native or Xamarin. But why settle for double the effort?

You could write your app in React Native or Xamarin. Then you'll get the UI widgets they give you...or have to implement twice (in at least two additional languages) if you want anything new.

Or you could do the sensible thing: Flutter. It is intrinsically general purpose, and that makes it the most future-proof choice around.