×
Anton DuzenkoSoftware Architect

On Flutter – For Anyone Curious but Unconvinced


Who’s talking and why?

I’m a full-time scholar and programmer with 10 years experience in desktop and mobile applications. Currently I’m working on a mobile app I created from scratch with Flutter. I tend to be generally conservative and skeptical on new technologies and trends. I’m still in search of the ‘holy grail’ or at least a ‘comfort zone’ cross platform framework. I would like to share my experience with Flutter in this regard.

What is it?

“Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.“ - flutter.dev

Sounds too good to be true, and of course it is. The only practical use case is creating new mobile apps for iOS and Android. Everything else is ‘ongoing work’ but all the actual work happens on mobile.

Note the ‘UI toolkit’ careful disclaimer in the headline. That’s what it’s all about, where it shines, and the only thing you don’t need to worry about (mostly).

It of course does allow you to write cross platform code but so do quite a few other similar frameworks, so nothing extraordinary there.

What is there like it?

React Native and Xamarin are the first that come to mind, but you might have heard about other, less successful frameworks, too.

I don’t have much to say about React Native other than I have a prejudice towards JavaScript in that it’s burdened with its historical limitations and Webpack has a steep learning curve (read: you need to grow a beard for months before you can dive into it). 

Xamarin looked promising at some point but, having worked with it for 18 months, I don’t want to think about going back to it because of the terrible, critical bugs the Xamarin team doesn’t care about or, worse, have no idea how to fix and just choose to quietly sit on them. Some of the most basic, obvious bug reports are left open for years without attention.

I don’t have personal experience with Cordova but it seems like it’s going through its twilight period.

So how does Flutter fare on this scene? 

How is Flutter different?

To start with, it’s no pain to get up and running, so the first impression is positive. Then you start experimenting with your first widgets and find decent support on stackoverflow, medium, etc, so you’re never left high and dry with the problems you run into. Oh, and it even hot-reloads - swell!

What is it good for?

Since it’s a total replacement for ‘trivial’ UI elements, it’s especially great when you don’t feel like using the native UIs at all. When could this happen?

  • You’re merely trying to save time on building a UI across different platforms. Ideally, Flutter wants us to think it can do desktop and web as well, but even when you build a UI once for iOS and Android it’s already a huge relief. That especially helps with view controllers and navigation logic, writing them is such a drag! 
  • (Possibly less obvious and even arguable) oftentimes you don’t want to use a native UI simply because it sucks. Stupid iOS constraints or crazy Android xml layouts - something supposed to help you but too often leaves you frustrated instead. 
  • You might find yourself limited regarding the choice of programming languages, too. How much better is Kotlin than Java and how much time do you want to spend learning it to find out? The mere fact that both Google and Apple have chosen different languages for their platforms should tell you that none of them is ideal.
  • UI designers tend to come up with designs and layouts that look deliberately anti-standardized. You look at it and realize: you’ll have to subclass at least a dozen different Views and do custom drawing on them (twice of course). And then comes the dreadful “tweak/compile/deploy/test” circle.

If at this point you decide to try Flutter, you most likely will find it rewarding. In fact, most of the time it’s a breeze not only to create new screens but also to both quickly fix and majorly refactor your existing layouts.

Where does it suck?

Unfortunately, in many aspects. First and foremost, everything but the frontend is essentially missing out of the box. Your 3rd party library list will grow everyday, and you can expect to find bugs in most of them. Then come the bugs of Flutter themselves - both at the app-level and IDE-level.

Yeah, sure hot-reload is cool - until it just quietly stops working and you’re stuck frustrated about why your app keeps misbehaving until you realize your changes didn’t make it through to the test device.

You can find the most unexpected bugs anywhere:

What are these black-and-yellow stripes, Flutter?

And why is it so hard to get the dropdown right? I remember it being broken on Xamarin too, big dejavu here.

But the biggest disappointment was (and is) the Dart standard runtime. Unlike the Flutter itself, we don’t have easy access to its source code. Nonetheless, coming from C# Linq and C++ std, it’s disappointing that its functionality is roughly what you get in web Javascript.  And at some point you start encountering bugs there too.

The Dart language itself suffers from a number of unfortunate design choices, mostly nuisances but some which can be error-prone or outright crippling.

The cherry on the cake - Flutter is supposed to be a front-end dream but debug builds lag and stutter on every user interaction. I don’t want to know why and I don’t care beyond the fact that it’s a sorry sight.

Contributing to Flutter has been a rough ride as well. A couple of my Google Maps plugin pull-requests were merged, but others got ‘prioritized’ and stuck hanging for months.

Bottom Line

Despite the long list of shortcomings above, I don’t think you should give up on Flutter. The guys behind it have done a great job of making potentially the best mobile frontend tool on the market. Yes, you still need reasonable skills with each native platform you target but this should be of no surprise when it comes to professional software development.

While it’s possible for one developer to work on an app from the ground up, I believe separating the Flutter frontend to a separate developer role will achieve maximum efficiency and speed of development. Switching contexts between e.g. UI transition animation and business model bindings requires a set-of-mind reboot.

Disclaimer

Flutter is one of the many new and exciting technologies we’re not afraid to take for a test drive here in Binary Studio. Doing this is a part of who we are, and where we’re going. If you’re like us, I think you’re going to like how we make software too.