Cross-platform Frameworks: React Native vs. Flutter22 December 2020 by Ed Freitas
There are several cross-platform frameworks in the market today: Flutter, React Native, Ionic, Cordova, and Xamarin, to name the most important ones.
There are currently only two serious options to consider; Flutter and React Native, which are the leading market players in the cross-platform space.
React Native was developed by Facebook and has been available as an open-source project since 2015 and the beta version of Flutter was released by Google in February 2018.
Since then, the community has been growing, but still limited compared to React Native.
Flutter and React Native are frameworks to develop both Android and iOS apps using a single programming language. Flutter is a user-interface (UI) framework intended for the rapid development of UIs based on Material Design and Apple Human Interface Guidelines.
React Native and Flutter differ from each other in terms of programming language, the way native components are accessible, the documentation, the testing options, and the way to release production apps to IOS and Android.
Because this is by far the most used web development framework today, the leap to React Native will be minor for many web developers. There are also plenty of tutorials and it is easy to reuse code between React and React Native.
Flutter, on the other hand, works with the Dart programming language, introduced by Google in 2011. This relatively new programming language is hardly used beyond Flutter development.
Object-oriented concepts make the language easy to learn for developers coming from Java, PHP, or C# backgrounds.
The programming language used is one of the most important criteria for choosing a framework. Its popularity determines the availability of specialists in the market, the size of the developer community, the quality of a final product, and the speed of development.
Dart is a Java-like programming language optimized for developing client applications for mobile, web, and server-side platforms, and it is characterized by strict typing, which simplifies debugging and maintenance.
Dart is a contemporary and rapidly developing language. It is balanced, integrates many modern approaches, and at the same time contains unnecessary syntax that can hinder readability and increase the overall learning curve.
React Native has a large community, many developers have worked with it and major players in the market use React Native, such as Facebook, Instagram, and Skype. The community shares a lot of information via GitHub and meetups.
This large community has the advantage that as an application owner you can easily find a developer and that as a developer you can easily find information. The framework is therefore also fully battle-tested and for almost every issue you can find a solution on the internet.
Flutter's community has been growing, but it is not very big yet to solve common problems. This means that it is more difficult to find developers with a lot of experience with this framework and it is also more difficult to find support within the community.
There are, however, online meetups and other events, taking place regularly. Another disadvantage of a small community is that there are relatively few extensions and plugins available. After all, developers of extensions and plug-ins are more likely to work with commonly used frameworks.
The core of React Native includes UI rendering and APIs. With those APIs, React Native can reach native modules. Many of these modules are from third parties. This offers many possibilities, but can also lead to instability.
Fortunately, React Native has been available for quite some time, making most APIs stable. Besides, working with the native components means that the apps created with React Native conform to the standards of the different operating systems such as iOS and Android.
Flutter is widget-based. Rather than using native components, Flutter works with a canvas-based rendering engine. Each widget is equipped with a canvas on which the widget can draw itself.
This is assembled into a scene which is then presented as a pixel matrix. The engine is a full Software Development Kit (SDK) with components of UI rendering, APIs, navigation, testing capabilities, and many libraries. There are also widgets for Material Design. For example, Flutter already has everything it takes to get started with hybrid app development.
React Native uses third-party tools and APIs for testing to make this possible, while Flutter has built-in testing tools. Flutter, on the other hand, has built-in capabilities for testing units as well as widgets and integrations. Documentation is also available for the various testing options.
The architecture of the framework is the second important criterion. It affects the ease and speed of development, the expansion options for certain tasks, and finally the quality of the end product.
Since Flutter is primarily a framework for developing user interfaces, it features a low-level Skia engine, which also powers Google Chrome and Android under the hood. Through this engine, Flutter can render its components at 60 frames per second (FPS). Flutter also has a diverse widget library.
This leads to high performance and seamless UI operations, as well as unified UI regardless of the operating system type and version. This makes applications look the same on new versions of Android as well as older versions. This is very difficult to achieve with native development.
So, by analyzing these various criteria, it will be easier to make an informed decision on which cross-platform framework is better suited for your organization's needs.
The rule of thumb is if your app is heavily dependent on high-performance user interfaces, Flutter is the best choice, otherwise, you might be better off using React Native.
This article was written for Krasamo and published on their blog.