Not too long ago, I published the Hashnode Lite application to the Android store. I was able to accomplish this feat due to the stellar GraphQL API released just days earlier by the Hashnode team. I got a lot of kudos from the community (even Sandeep himself) about the effort. In this post, I will try to explain why I chose to use Flutter to build this application.
Why not X?
The two most common ways of building applications are natively and using a cross-platform solution.
Why not native?
Writing the same feature twice, only in different languages and platforms, and having to learn all of them, seemed wasteful.
Even if I never decide to release Hashnode Lite on iOS or web or desktop, I don't believe in walled gardens. I would never choose a technology that basically forced that on me. My solution would have always been cross-platform.
Why not React Native?
But Ryan, you love React! Why the betrayal?!
Flutter has a complete toolkit for building UIs that is also very extensible, so I spend less time trying to figure out how to turn designs into code.
Flutter is generally faster to develop with given the speed of hot refresh & hot reload so I spend less time twiddling my thumbs in between saves.
Flutter's errors are better and continue to improve because of the features being built into the Dart language.
Finally, but maybe least importantly depending on the audience, Flutter resembles native apps in terms of performance.
I have yet to meet anyone with a similar path to Flutter that arrived at a different outcome.
I am fine with Dart
More specifically I am fine with Dart's trajectory and evolution as a language.
Dart as Flutter's language choice is possibly the most contentious point of critique. You don't have to venture far to find an article lamenting that Flutter isn't written in language X. I think the points are fair but I know based on past experiences that the Dart code I write 5 years from now will be completely different from what I write today.
Side projects are for fun
Over the last several years, there is a long list of cross-platform solutions that I have experimented with. They include Electron, Tabris, NativeScript, React Native, Xamarin, Node Webkit, and Ionic just to name a few. In many cases, I gained experience building native plugins as well. I had fun and grew tremendously along the way.
Side projects are for career development
But Flutter is made by Google! Won't they just going to kill it!
There is a big difference between killing a free product that costs development and hardware resources to maintain and killing an open-sourced project. Remember GWT? If you're young enough, you probably have never heard of it. But it is very much still alive. Likewise, developers have been declaring the demise of Angular for years. It is still flourishing.
Hopefully, you have a better understanding of why Flutter fits my needs. I am not dogmatic about any of the points I have made in this article. Flutter continues to work well for my needs, and I have not had any regrets since I started learning it.
I will continue this series of short articles explaining how I built the application. Feel free to peruse the source. If there's something missing or a bug that you find, don't hesitate to open an issue. I look forward to any feedback & collaboration from the community and hope this application will outgrow me :).