In the case of development on Flutter, the risks are higher, since the framework is young, the release was released only in December 2018. So far, there are problems, for example, at one time or another, the assembly of libraries is available only for one platform, there are crashes in Android Studio, there are bugs in some plugins and libraries. On the other hand, all this is being finalized and corrected. The risk that Google will stop supporting Flutter, as it has already done with other projects of the company, cannot be ruled out. However, Fuchsia OS is written in Flutter, which some developers see as a replacement for Android.
For the developer
Above, we described the factors that both the business and the contractor take into account. There are also technological criteria, which are primarily taken care of by the project manager. For example:
— Level of knowledge of native languages and team preferences
React Native uses native modules under the hood. As a result, if there is a need for customization (and this is not supported out of the box), it is necessary to work with native modules. For example, in our practice there was a case when we had to customize the Yandex.Maps library to display custom visual components on the map.
Flutter, unlike React Native, stands out with its own graphics engine. On the one hand, this allows you not to touch native at all when developing simple applications. On the other hand, if you need to refer to native, this means additional complexities (for example, messaging with elementary data types and JSON) and the inability to use native graphical components.
— Entry threshold
If a developer decides to learn a new language, the availability of a community, as well as help information and documentation, becomes an important issue.
Flutter and React Native are constantly evolving, they have an active professional community and good documentation. At the same time, native development is ahead of frameworks, thanks to a larger community and more training materials and forums that describe the development of complex components.
“Crib” for selection
The following comparison table will help simplify the choice and answer the question in which cases one or another implementation method is suitable (or not suitable) for creating a mobile application.
If the choice is made in favor of frameworks, we advise you to pay attention to the following aspects of work:
You need to test all involved platforms (iOS, Android). It is important to objectively assess the level of knowledge and experience of all project participants so that the estimate in hours is not underestimated. Consider the risk of bugs in the React Native and Flutter frameworks themselves during development.
Some elements are difficult (or even impossible) to render in Flutter or React Native. For this reason, the design must be agreed with the developers – and before the customer falls in love with a beautifully rendered picture.
On React Native, specific problems with autobuilding are not ruled out (for example, due to installing libraries on different platforms). You need to build more risk reserve.
The implementation of splash screen on Flutter is faster than on React Native, where this element can only be rendered natively, with a high probability of bugs. When using React Native on a splash screen with all renderings and bug fixes, it is desirable to put in more time.
When using React Native, layout on iOS and Android should be carried out simultaneously in order to avoid problems in the future when adapting the layout to one of the systems.
Parallel web and mobile development
If the web version of the application is written in React, the time spent on developing a mobile application in React Native is less due to the same logic of the components.
If the application is large, React Native makes it easier to test and unit tests. On Flutter, you need to spend more time on a bug fix, since the logs are not informative.
Application work with system files
It is necessary to request permission to the sd-card, while not with every file it is possible to get the name and path. Sending a file requires the use of a ContentResolver. In order to minimize risks, allow time for all operations related to the file system.
Delivery of assemblies to the client
There are no significant differences from native development here, you can choose any convenient service: Crashlytics, TestFairy, TestFlight.
React Native vs Flutter
We at SimbirSoft use both React Native and Flutter, depending on the nature of the application. We share several observations from our practice, which help to foresee the peculiarities of working with a particular framework.
The development of native and hybrid mobile applications has its own advantages and disadvantages, which are taken into account by the business and the contractor when choosing a technology. Among the most significant criteria are the timing and cost of development and maintenance, compliance with the task, safety and prospects, and the level of development of the community. Based on their experience, a mobile developer helps to choose the best solution for each specific application. We hope that our criteria and comparison table were useful to you. Thank you for your attention!