Congratulations! This is an exciting moment to begin building a new mobile app. Cross-platform frameworks have changed everything: thanks to them, developers can now ship performant apps across many platforms with a single codebase. Two of the biggest frameworks are Flutter and React Native, both with a ton of buzz around them. So what’s the right choice for your project? Well, the answer is “it depends.” They have different strengths and weaknesses, which we'll explore in this article.
What is Flutter?
Created by Google, Flutter saw its first beta release in February 2018. Flutter allows you to deploy applications to the following platforms:
- iOS
- Android
- Web
- MacOS
- Windows
- Linux
Flutter apps are written in Dart. This is a strongly typed object-oriented programming language with classical inheritance. It’s performant and very easy to learn.
Additionally, Flutter is useful for creating beautiful customized UI experiences. It’s easy to launch an MVP using the expansive widget catalog. Later you can customize every widget so it’s a perfect fit for your brand.
Many of the leading companies are using Flutter for mobile development, such as Tonal, Signify/Philips Hue, Google, Alibaba, and more. For more examples, be sure to check out the “It’s All Widgets” showcase.
What is React Native?
Created by Facebook, React Native saw its first preview release in 2015. It enables cross-platform development across the following platforms:
- iOS
- Android
- Windows
- MacOS
Additionally, it's easy to port React Native apps to the web. This is because React Native uses JavaScript and shares its architecture with React.
Please note that React Native apps are actually native apps. They use native UI components. This is unlike Ionic and Cordova, which are wrappers for web apps.
Popular applications that use this framework include Instagram, Facebook, Skype, Pinterest, or Afterpay. Like Flutter, React Native offers an official showcase.
Dart Vs. JavaScript
Dart is a strongly typed language that uses classical inheritance. It's easy to learn for developers who have used similar languages like Java, Swift, Kotlin, and C#. There are many proven design patterns that have stood the test of time work well with Flutter projects.
JavaScript is one of the best-known programming languages. If its loosely typed nature is a concern, then TypeScript is also a compatible option.
One question the Flutter team is often asked is why did they choose Dart over JavaScript. The answer is simple: Dart provides the flexibility of an interpreted language while offering compiled performance.
Both languages have benefits and drawbacks. The deciding factor here is likely the skillset of your developer team.
Native UI Vs. rendered widgets
React Native uses the native UI components included in iOS and Android. When those elements change as part of an operating system update, your app updates as well. This can reduce the need for new releases, but also has the potential to break your application.
Flutter renders every widget from scratch on your screen. You can make native interfaces using the Material Design and Cupertino widget libraries. Both of these libraries adhere to their respective design standards. The result is that the user doesn’t realize (or care) that they’re not seeing native UI elements.
The downside to Flutter’s approach is that the “old” UI is still used after major OS updates. Fortunately, the Flutter team is quick to update the libraries. “Upgrading” your app is painless.
The benefit to Flutter’s approach is that you have total control over how your app looks. Do you have a designer who insists that a drop shadow should be two pixels wider? With Flutter, this is a simple change.
This also makes it easy to create interfaces driven by your organization’s branding. Every widget in the Flutter library can be customized. You can also develop your own custom widgets if needed.
Platform Advantages
Advantages to Flutter
- Dart is easy to learn. Especially for developers used to languages such as Java, Kotlin, Swift, and C#.
- Flutter makes it easy to customize your UI, thanks to the approach of customizable widgets.
- It's easy to maintain your app’s appearance on older devices thanks to the widget library.
- Flutter is experiencing rapid growth and has an enthusiastic community.
- With the recent launch of Flutter 2.0, web and desktop apps now have full support.
- App development times are generally low when using Flutter.
Advantages to React Native
- JavaScript is well known. It’s easier to find developers who are familiar with it.
- Porting an existing web application from React to React Native is straightforward.
- React Native has been on the market longer (over six years)
- The React community is massive.
- Code is easily reused between web and mobile projects.
Shared Advantages
- An incredible amount of educational resources are available for both frameworks.
- Both frameworks offer packages to extend functionality. Flutter uses pub while React Native uses npm.
- A hot reload feature is available on both platforms. This allows developers to see their code changes instantly.
- Both frameworks offer options for e2e testing.
Conclusion
Both React Native and Flutter offer distinct advantages. There is no correct choice that works for everyone — it all depends on your organization's specific needs. One concern many folks have is how their framework will perform in a CI environment. Bitrise supports both Flutter and React Native as first-class platforms with customized steps that make the CI part of your project a snap!