React Native is still my personal favorite. Fortunately, app development is not the same as romantic relationships. I won’t be blamed for looking around and exploring other options.
Two years ago, Google’s team released a framework named Flutter — I decided to carefully study it. As a standalone SDK and in comparison with React Native. This article sums up all the conclusions I came up with.
Who might find this article helpful:
- Developers who want to master their cross-platform app development skills.
- Product managers who look for an appropriate technology to build an app for both iOS and Android.
Let me get straight to the point.
What’s interesting about Flutter
The week of digging deep into Flutter allowed me to gather a few interesting facts about this framework.
Here’s what I’ve discovered so far:
- Dart is easy to get for devs that have experience with OOP languages. Though, unlike Java, it has high-level functions.
- True Hot Reload. This is definitely Flutter’s killer feature that makes it way easier to make adjustments and try new things: add or remove features, correct mistakes on the fly.
Simulator or an actual device, Hot Reload allows to quickly update both – Source
- The approach of working with states reminds the React concept. Widgets (or components in web) changes when the app state changes. The devs can even use Redux (Alibaba’s fish redux as an example) and implement a unidirenctional data flow — it will allow to manage application state just like in React Native.
- Similar to React Native, the interface is split into separate modules. Components are called widgets, so the interface looks like the widget nested hierarchy.
- Has a system of ready-to-use plugins and libraries available on pub. You just open the Dart package manager and pick ‘Flutter’ in the search bar.
2600 repositories — not bad for such a young technology
- Works with http-requests and websockets. Supports GraphQL and all popular libraries.
- The most important libraries are already released. New ones keep appearing. There’s no feeling like ‘People don’t care about the future of Flutter’.
Flutter or React Native
Which one is better? To find an ultimate winner, I decided to take Flutter and React Native for a spin. Let me start with React Native as it’s time-proved.
So, here are the biggest React Native benefits:
- Huge community. React Native has gained tons of libraries and ready-to-use solutions over the past 4 years. Almost any issue might be solved by quick googling.
React Native feels better than okay. Stars, forks and resolved issues prove that
- Possibility to wrap native code into JS. If the dev knows native languages, he can write some piece of the app on the native level and then wrap that up into a React Native component shareable between both IOS and Android platforms.
Enough about React Native. Why choose Flutter?
- Fast as native solutions. There’s no JS-bridge in the middle — Dart compiles directly to native code. It means that the speed of operations is comparable to Objective-C, Swift, Java, or Kotlin.
- An excellent virtual machine. You won’t have to worry about libraries’ linking (one of the biggest pain points in React Native), compatibility issues (on the native level), because the entire code will be executed by the Dart VM.
- Supports multithreading. Unlike JS, Flutter enables you to accomplish several tasks simultaneously.
- Doesn’t rely on native system components. It’s Skia-based. To draw every single pixel, Flutter uses Google’s Skia. There’s no need to create two interface versions — one for iOS and another for Android. Skia ensures UI predictability for both app versions.
- 120 fps performance. In terms of performance, Flutter is ahead of not only RN, but also native languages. It’s all because the Skia engine, which paired with animation framework allows to speed up the dynamics and motions.
A few drawbacks of Flutter that I noticed:
- Weak community. Unlike JS, Flutter is still very young. (But it might change one day).
- Provides fewer UI libraries. Therefore, the devs have to write many basic tasks (like components and services) from scratch. As for React Native, a huge amount of libraries allows to implement almost everything within a shorter time.
- Hard to integrate into existing projects. To work with legacy codebase you’ll have to rewrite everything from scratch in Dart, when React Native allows you to add new functionality to already existing native app.
- More not ‘under the hood’ code. Proprietary graphic engine boosts the performance, but at the same time requires writing much code for nice features.
So, who’s the winner?
For cross-platform apps, React Native is like a reliable warrior. He went through fire and water. Proved his greatness by winning fights. With such a warrior, everything is transparent (no surprises at all). And this is so good!
React Native is a reliable warrior, while Flutter hopped on the hype train
Which one to pick? One would rather not experiment and opt for a well-established framework. Another would love the idea of getting started with a hyped technology. It’s entirely up to you — it is not possible to give any better conclusion.
To make the decision-making a little less stressful, consider answering these questions.
- Is the codebase ready for scaling? In case the project is written on native languages and you don’t want to rewrite code on Dart from scratch, opt for React Native
- Need outstanding animations? There are a couple of solutions for animations in React Native (e.g. Lottie by Airbnb), but Flutter is far more ahead in that matter.
- Is the deadline close? (always close). The more libraries and ready-to-use solutions a technology has, the faster and easier the implementation process will be. If your main priority is ‘Quickly deliver an MVP to market’, React Native will be the best option ever.
What will the future of Flutter and React native be like? The market will dot every ‘i’ and cross every ‘t’.