I recently wrote a Flutter app that needed camera access, location access, http upload, a login and a local database for Android and IOS. It was my first time using Flutter and I came away thinking it’s pretty great, it exceeded my expectations. It is the only UI framework I know of that supports 99% of computers out of box. Below I present my experience working with Flutter for one month.
Cross Platform
Flutter is cross platform. You can write one code base and deploy to Linux, Windows, MacOS, iPad, iPhone, Android and the web. However, I found that the more complicated an app I am writing the easier it is to limit the platforms I am targeting. The best or recommended packages for things like databases, camera permissions or geo location are not yet written to support Linux or Windows. If you want to support all the platforms from one code base for a complex app it will require some unique problem solving.
Development Experience
Hot reload is great, you can make a change in code and see it live on device in less than 5 seconds.
Declarative UI programming I find intuitive. Your UI is a function of your state so as long as you keep your state management code tidy you can read your UI and state like a book.
Platform specific knowledge will be needed eventually but only a little. When it is time to test your code on device or deploy to an app store you will need to gain some platform specific knowledge about declaring permissions, signing the deployable unit and app store processes.
Dart is the programming language for Flutter. It is statically typed but offers the option for variables and functions to return type dynamic
. It also has null safety features and syntax like ?
and !
to help you avoid null pointer exceptions.
Abstractions
The story of application development for computers in the last 50 plus years is in large part a story of abstractions. Flutter is partially a framework for abstracting platform specific APIs and most of the time it feels like magic. However, if you’re dealing with something like bluetooth you may find that the Flutter community has not yet perfectly mapped those APIs.