React Native vs Flutter - which way to go?
React Native and Flutter are cross-platform solutions for rapid mobile development backed by such tech giants as Facebook (React Native) and Google (Flutter). Considering vast capabilities and the relatively young age of both of these frameworks, even for a seasoned developer, it might not be that obvious which one to adopt to address particular business needs.
As long as pretty much everything in computer science is about trade-offs and picking the right solution for the right problem in this blog post, we will try to summarize cases when you might prefer to use Flutter over React Native and vice versa.
For React Native
Suppose You have a well-established team of web-developers at hand. React Native truly allows web-developers (especially those with expertise in React) to start writing cross-platform code right away and makes the transition from web to mobile smooth. Things are getting even more comfortable if the decision is made to utilize Expo platform, which abstracts away a lot of native mobile configuration and provides some useful features out of the box (such as OTA updates).
If You are building a proof of concept app or the deadlines are merely tight. Huge JS and RN ecosystems and communities will allow you to iterate faster. For example, the already mentioned Expo OTA updates system or Microsoft CodePush service will enable you to upload JS code directly to the user's devices, thus avoiding republishing your app to the stores. It is a considerable benefit for bug fixing and introducing new app features.
Suppose You enjoy the FP paradigm. Although JS is not a functional language, it does allow you to utilize some FP patterns. React itself is built with functional style in mind (reusability of components, one-way data flow, usage of composition over inheritance, hooks), which is considered an excellent approach for building UIs by many developers.
Suppose You or your team don't have a JS expertise. One of the main React Native selling points (and for a good reason) is the web team's ability to start coding mobile app right away. If you can't leverage this advantage of React Native, then Flutter may be a better choice keeping in mind its other strong sides.
Suppose You favor the OOP approach. Although Flutter utilizes a declarative approach for building UIs (as opposed to Android SDK or iOS UIKit) still developers with OOP background might find Flutter ( built around Dart language) to be closer to their hearts. Dart itself is an object-oriented, single inheritance language that uses a C-style syntax and supports interfaces and abstract classes.
If performance matters. Flutter was built with performance in mind. Its code is compiled to native ARM machine code using Dart's native compilers. Although you can reach close to native performance metrics with React Native on this field, so Flutter is a clear winner.
So which way?
Our summary call here: for startups or quick MVP - ReactNative is the way to go, especially when you have JS guys.
Flutter - experimental, long-playing, reliable solution that is great for Google lovers and non-JS experts. Community and ecosystem are getting more and more popular. Check for google.io conference updates.