clock menu more-arrow no yes

Filed under:

Can Google make cross-platform mobile app development suck less?

New, 15 comments

Flutter hits 1.0

Today, Google is holding a developer conference in London for Flutter, a new development environment for developing mobile apps for both Android and iOS. Google calls Flutter a “portable UI toolkit,” and Paul Miller has called it “a Frankenstein’s monster of various Google projects.” The big announcement is that it’s coming out of beta, and it has hit 1.0, opening the door for developers who have been waiting for something more official before adopting it.

In essence, Flutter is a framework that allows you to create native apps on both Android and iOS without the usual compromises that come from cross-platform frameworks. You’ve probably heard the phrase “write once, run anywhere,” but it’s almost surely been in the context of an impossible dream for developers or a living nightmare for users.

So what are the compromises that usually beset cross-platform apps? The main one is that these apps are often slow because they run through a code interpreter (often JavaScript) instead of just being compiled native ARM code. Another big one is that these apps don’t often look or feel native because they use different buttons or widgets or whatnot.

Flutter has some clever tricks to avoid those problems. The first and most important one is that it compiles to native code. Second is that the apps you make with it can look and act like any other native app — in fact, they’re “pixel-perfect” when you compare what you see in your development environment’s emulator window and what shows up on an actual phone. Flutter uses the same codebase to create both the iPhone and Android app, yet they can look different so you don’t have something on an iPhone that feels like it belongs on Android (or vice versa).

Those things seem like all you need to make something truly native, I suppose, but Flutter goes about it in an interesting way. This is where the “Frankenstein’s monster” part comes in. Take it away, Paul:

[Flutter is] based on Google’s own Dart programming language, which is apparently popular within Google but nowhere else. It has a rendering engine based on the Skia Graphics Library, the same thing Chrome uses to draw pixels on a screen. There’s an IntelliJ IDE for Flutter, just like Google has with Android Studio. And Google is also using Flutter in its upcoming Fuchsia OS, so that whole team is in the mix. Instead of wiring up to native Android and iOS components, Flutter paints every single pixel to the screen. Flutter has pixel-perfect replications of the iOS UI and Android’s Material UI, so developers can build familiar experiences out of the box.

That’s a negative way to spin it, but if what you’re looking for is a fast and easy way to build an app, Flutter could be really useful to you. Tim Sneath, group product manager for Flutter, says, “For us, the closest analogy is not a cross-platform framework, it’s something more like Unity. Unity’s a games engine, you’re writing code that runs super well on both platforms and its engine is optimized for great gains.”

Before Google, Sneath spent 17 years at Microsoft, a rival that’s also been working on building tools for developers to improve cross-platform mobile apps. Microsoft acquired Xamarin nearly three years ago, and it has been closely aligning it to its Visual Studio developer tools to allow developers to build apps that work across iOS and Android. Facebook also has its own cross-platform solution called React Native.

Sneath says that even though Flutter’s been in beta, he’s seeing a decently large set of serious companies using it, including Alibaba, Groupon, Philips Hue, and Tencent. The Google ads app also runs on Flutter, but most Google apps don’t, and they probably won’t. This isn’t a Brave New Development environment Google expects everybody to switch to. Instead, it’s a new way to make apps quickly and easily.

The part that has people most excited about it is something called “stateful hot reload,” which means that as you code in your development environment, you can see what your app will look like right away without waiting to compile or losing the state of the app. It’s something web developers take for granted, and it is genuinely cool to see for mobile apps.

I also spoke to Matías Duarte, VP of design at Google, who’s very excited about this particular feature in Flutter. He likens it to the moment when Firebug became available. Suddenly, you could start editing HTML right in the browser and see the results in real time, without reloading anything. It allowed you to play around with webpages to see how they tick, and Duarte hopes some of that same playfulness and accessibility will come to new mobile app developers with Flutter.

“We want to unlock the creative expressiveness of humanity in software,” he says. “Webpages had a huge amount of creative expression and brand diversity. But we haven’t seen so much of that in native application development because it’s always funneling through these slow-to-move native frameworks.”

Duarte says that Flutter — and, in particular, Material Design on Flutter — has an “easy ramp” to much more complicated or creative UIs. So a basic user can just use the built-in widgets and tools, but it shouldn’t be too difficult to start customizing stuff all the way up to something completely custom. “It’s one continuous gradient,” Duarte says.

And for Duarte, Material Design is not just a standard way that apps should look. It’s an entire design philosophy that’s meant to be interpreted and changed by designers and developers. Flutter is another place where his Material Design philosophy can be instantiated. And even if you just go with the basics, you can still make an app that looks native on iOS. (There are the cheekily named “Cupertino” components.)

I have not seriously coded in probably a decade (and even then, my ceiling was causing damage to a CMS with PHP), but I know enough that my hackles rise when somebody says “best of both worlds” in the context of cross-platform development. There’s always a compromise. Either you get a slow app, an app that doesn’t feel native, an app you write twice, or something else.

With Flutter, the “something else” is a mix of a bunch of stuff like needing to use Dart or having an app that doesn’t technically use the native widgets that each platform provides. Or it could be any number of other things. Here’s (naturally) a pretty decent HackerNews thread about it based on (naturally) a Medium post about the pros and cons of Flutter, including a bit about how it compares to React Native.

So to answer the question in the headline: yes, Flutter could make cross-platform app development suck less, but it is not (nor will anything ever be) a magic bullet. It seems kind of cool, though, and it also seems pretty likely that it will play an integral part in Google’s mysterious Fuchsia OS. So if nothing else, it’s worth keeping an eye on.