I've always wanted to build apps, but never had the capacity to start learning yet another programming language. I'm already proficient in multiple programming languages, as well as trying to master two human languages, so I always just put it off. React Native sounded like a good idea as it is mainly just JavaScript, but certain React Native apps had a lot of "jank" which somewhat put me off.
Then I heard about Flutter. Now Flutter is written in Dart and the syntax for building UI elements is considerably different to ReactJS, so although I was intrigued, I never dipped my toes in. I was excited about how Flutter supports mobile, desktop, "web" and embedded development all in one codebase whilst impressively compiling down to native code. Note, React Native somewhat compiles down to native code, but there is a Bridge between the JS layer and Native layer. It has been noted as being a bit naff, which is why work is underway to rethink this behaviour.
One day, I was visiting my friend and colleague Alex Marin - a great designer - when I saw a mock up desktop app for a company. Alex loves experimenting and trying new things, so I thought I'd do the same, experiment and try new things - thus I finally downloaded all the requirements and began developing my first Flutter app for macOS.
Some things I love about Flutter
One codebase for multiple platforms
Flutter allows you to build native apps for mobile, desktop, and embedded devices using a single codebase. This is a huge time-saver, especially if you're developing apps for multiple platforms, and even if you're not, it gives you the flexibility to do so in the future.
This however doesn't mean it will "just work" on all platforms - there will still be platform specific work that needs to be done (think
.plist
files and other configurations for apple devices).Frontend and backend in the same language
You can write your server technology in Dart and your frontend in Dart too. It's one of the things that React Native / ReactJS developers really love. After that, it just comes down to preference of the developer, i.e. whether they want to stick with a language they know in JavaScript, or whether they want to try something new.
Declarative style
Flutter widgets are written in a declarative style, which is quite different to what most UI developers are used to. Making the mental switch is quite mentally satisfying, but it does get a bit of getting used to. A declarative styles means that you describe what you want your UI to look like, and Flutter does the rest (read more here).
Hot reload
A common feature nowadays, but Flutter's hot reload feature allows you to see your changes reflected in the app immediately, making for faster and more efficient developmet.
Community
Flutter has a large and active community and is affiliated with Google. There are many resources available to help you learn Flutter, and there are many people willing to help you if you get stuck. Anecdotally however, adoption seems to be mainly from the Eastern part of the world, with the Showcase showing adoption from Alibaba Group, Tencent, ByteDance, NuBank and Toyota, as well as numerous tutorials from super-talented Indian YouTubers.
Performance
Flutter apps are known for their excellent performance because Flutter apps are truly compiled to native code for each platform (unlike other solutions). I remember seeing benchmarks where a Flutter app outperformed a Swift application, but this made no sense whatsoever. Flutter is considerably more performant than React Native, however.
Speed
The final thing I loved about Flutter is how easily one could go from not knowing anything, reading the docs and then to developing quite a nice looking app. As mentioned in previous articles, had I just used a Material Design inspired design, I would have had a solution built fully within a few days, albeit just covering happy paths. And once again, when you can just compile down your code to a Windows executable and then to an Android app in one pipeline, development just becomes crazy fast!