What is Flutter?
Flutter is a development library which is used to create cross-platform applications. You write your code in the Dart language and you can use Android Studio as your IDE.
Flutter UI is all focused around widgets. Everything is a widget. You create these in Dart too, no separate UI language or markdown.
Flutter uses Google’s Material Design principles and has lots of built-in widgets. This makes it easy to create Material screens. A simple list screen could look something like:
Here we have a screen composed of a Material Appbar with a title and icon button. We have a scrolling list of ‘items’, which consist of a piece of text and an icon.
Recently I spent a couple of days exploring Flutter. My aim was to get a flavour for the framework, and conclude if it was worth investing more time in.
I followed Flutter’s “first app” tutorial and read through “Flutter for Android devs”. I then set out to copy a simple app we had built before, for one of our clients.
It was easy to get setup. Flutter provides good documentation which details all the required steps. Check it out here.
Once setup, they walk you through creating your first app via a codelab. This is well structured and starts to build your foundation.
Flutter is surprisingly well supported in Android Studio. All the tools you come to expect are available. It was nice to be able to learn something new without also learning a bunch of new tools.
Dart was a lovely language to develop in. This was my first experience of it and I found it familiar and intuitive. It's a fresh and modern feeling language. Although it is missing some features that I have come to love about Kotlin (my Android language of choice).
Material Design has been undergoing some serious updates over the last year or so. They have made their components more flexible and platform agnostic. These changes have been fully embraced by the Flutter team. Their components are mostly up to date from my experience.
Flutter also offers some more “typical” iOS widgets under Cupertino.
Outside of these, it would be difficult to implement any other design pattern. Fortunately, for most use cases these will be more than enough. The Material Designs principle are strong and becoming more and more at home on multiple platforms.
Notes for designers
Designing exclusively using Material components will make the development faster. To help with this checkout the material plugin for sketch.
Flutter’s hot reload feature is fast. It refreshes the UI in place which makes it quick to make layout tweaks and iterate.
One code base, two platforms. In the simple app I set out to copy, I didn’t need any platform-specific code. This is a significant improvement on some other cross-platform solutions.
My apps did not perform well to begin with. Lists stutter, taps get delayed and animations skipped frames. But what isn’t mentioned in Flutter’s “Get Started” documentation is Release mode.
In release mode Flutter compiles the app differently to focus on performance. Running in release mode makes your app run smoothly.
Try not to get put off by the Debug mode performance, as it will likely drastically change.
Will we be switching?
At Brightec, we want to create the best and most premium feel for our users. We want to creatively design custom solutions. We want to delight.
Currently, Flutter does not offer the flexibility we typically want in our designs. Although it may be suitable for some projects in the future. It would also require a shift in skillsets, which is always a consideration for any company.
Google’s stance on Flutter seems to be very mixed, which is slightly concerning. The Android team have a clear aversion to it when questioned. It will be interesting to see if it lasts or whether it fades to the background of Google’s priority.
The future of cross-platform?
I think there is a future for cross-platform. I don’t think it lies in shared UI frameworks though. I believe it lies in a shared language.
I am eagerly watching Kotlin multiplatform. It enables you to write some shared Kotlin code, which can be called from both Android and iOS code. We are excited to try this out on a project soon.