The mobile application industry has grown tremendously over the last few years. In 2017, revenue from app stores known as App Store, Google Play and other sources sum-up to a whopping amount of US$86 billion. This number is a reflection of the great success of the platforms, which boosted the business of companies and the creation of several applications that revolutionized the way in which the users of mobile devices organize, move, and use the products. In fact, mobile applications have become a necessity in everyday life for people and businesses.

This rapid growth has brought a huge challenge to mobile application developers in order to meet this market demand: creating, in record time, applications that work very well across multiple platforms (Android, iOS, Web, etc). The solution to this was the development of frameworks for creating cross-platform applications, it means that from a single code, the developer can build an application for several platforms. Two of these frameworks are the main focus of this article and will be discussed throughout the text.

This article aims to introduce the reader to existing alternatives for the development of mobile applications (Native or Hybrid) and to show a comparison between two frameworks that promise to be the future of mobile application development: Flutter and React Native.

Native Development

The “traditional” way to develop a mobile application is to use the tools and languages specific to a particular platform, which in most cases are made available by the companies that own the technology. For example:

For Native Android Application development, you would utilize the tools, SDK, interface elements, all made available by Google, using Java and/or Kotlin programming languages.

Devices that have iOS as the operating system use the tools provided by Apple and the languages are Objective-C and Swift.

Native development has many advantages, most of them related to application performance since all the code and tools used were built specifically for that platform. The performance is a determining factor in the usability and performance of the application, as well as making a big difference in the user experience.

The disadvantages are simple and very easy to point out. The first is that if you or your company wants an application running on multiple platforms, you need to have the knowledge of both, hire someone who has it, or hire multiple teams specific to each platform, and it makes development somewhat more costly in many ways.

One of the factors that make this so difficult is the lack of professionals who master native development since learning is an onerous process. In addition to the cost, the development time may be longer, since developing native requires the developer to worry about details that, for smaller applications, could be easily ignored.

Because of the drawbacks in “classic” native development, the popularization of mobile applications and the great financial returns they bring to startups, independent developers, and large companies, there was suddenly a need to create apps faster and less costly. Thus, cross-platform development was born.

Cross-Platform Hybrid Development

Development “Cross-Platform Hybrid” is the approach of so-called Web Apps, that is, applications developed using Web technologies (HTML, CSS, and JavaScript).

This form of development is cheaper since the development time is reduced because the application can be used in different platforms (iOS, Android, etc), and gives the programmer great freedom to create applications that look identical to native applications but are actually running in a browser.

All the freedom comes with a heavy toll. Escaping the platform design pattern is one of them. iOS and Android systems have several peculiarities, such as gestures, actions, colors, shapes, etc. When an application is developed using a hybrid platform, all of the above factors can be compromised if the application interface is not well planned, affecting much of the user experience.

The hybrid development is more attractive for those who need simple applications and will refrain from using complex functionalities of the operating system of the device. It is a cheap and fast alternative, but the performance, UX (User Experience) and difficulty in using native features such as camera, Bluetooth, storage, GPS, etc., can compromise more complex applications. Some examples of these frameworks are Ionic, Cordova, and PhoneGap.

React Native Overview

Given all the problems identified in the native development and the possible solutions proposed by the community with the Cross-Platform approach, some frameworks currently stand out in the market.

One example of success in the market is React Native, launched publicly with the open source in GitHub in 2015 by Facebook, joining the native APIs Android and iOS, in order to greatly simplify the mobile development. React already has in its portfolio several famous applications such as Facebook, Facebook Ads Manager, Instagram, Facebook Analytics, Pinterest, Skype, Tesla, Uber, Walmart, Wix, Discord, SoundCloud Pulse, Adidas GLITCH, among others. The programming language is JavaScript, pointed to by GitHub as the most commonly used language in its platform. The framework also supports native widgets which makes browsing and user experience quite enjoyable. It supports some Android and iOS APIs, as we’ll explain later.

Flutter Overview

Flutter was developed by Google and launched in 2017. Although new, it promises to revolutionize the mobile world. The documentation is amazing, there you can find detailed explanations about every method there is. It has its own widgets, and it is totally based on Google Material Design. Its programming language is what may be surprising to many, the Dart language framework, launched at the GOTO Conference in October 2011. Although it seems bad to adopt a new language not used by the community, Dart closely resembles languages like JAVA, C #, and C ++, promising a small learning curve for programmers with some experience.

Flutter and React Native