This blogpost was updated in July 2020 to include the latest Flutter developments.
From faster development and simultaneous app updates, thus saving a lot of time, to easy maintenance, Flutter has a lot of advantages, and we often recommend it to our clients. However, it won’t suit every project. Read the article and find out, if it’s a good fit for yours.
I know that if you follow Betteridge’s law, the answer to the question placed in a headline should be „no”, but in the world of mobile development, nothing is that simple. It depends on what you want to achieve and what are your project’s business goals. Flutter is a really good framework for some things, but as all cross-platform technologies it also has limitations.
You shouldn’t consider it as a magic bullet for all your troubles. In this article, I’ll list the pros and cons of using Flutter, that you, as a business owner, should consider before starting a project in Flutter. We are using a similar list at 10Clouds to recommend our potential clients technology that they should pick for their next product.
Disclaimer: This article was written just after the publication of Flutter 1.5.4 and my experience is based on that and previous stable versions of Flutter.
Flutter for Your Project: Pros
1. Faster Development
Flutter is a cross-platform solution, so one codebase can be run on both Android and iOS. This saves a lot of development time. Of course, it will not be cut in half, but it is safe to bet that writing one codebase for both platforms will take “at least one quarter less” than writing separate projects for both platforms. I and other of our developers also think that writing Flutter apps is easier than writing native applications – we wrote an article about it some time ago.
2. Simultaneous App Updates on Android and iOS
The same codebase for both platforms allows you to release app updates simultaneously. This one is hard to achieve when there are separated projects for both platforms. Different availability of developers, or longer implementation on one platform makes synchronizing difficult. The problem grows when an application update also requires changes in backend infrastructure.
Flutter and other cross-platform tools remove this problem because we make applications for both platforms at the same time. Of course, it is worth remembering that iOS application must pass Apple review each time it is updated.
3. Easier to Maintain and Develop New Features
When your apps are ready and published, you can focus on expanding the user base. This often means moving the app to the maintenance mode, in which fixing bugs is a top priority, and adding new features goes on a second track.
On this step, startups often think about creating their own team. With Flutter, it can be easier because you have to hire one developer instead of one for iOS and the other for Android.
4. Future-proof: Instant Fuchsia Support
Google is working on a new operating system called Fuchsia. There is vague info right now what this system can be, but there are speculations that Fuchsia will eventually replace Android. Flutter is a native framework for Fuchsia apps. If you write an application in Flutter, you will be ready to release it on Fuchsia from day zero. This can give your app an early adopter boost.
5. A Perfect Choice for Advanced UI
Flutter renders all parts of the interface using internal graphics engine called Skia – the same that is used in Google Chrome, Mozilla Firefox, and Sublime Text 3. This fast and well-optimized piece of software allows Flutter to behave differently than most of the other mobile development frameworks.
Using Flutter is closer to writing a game. From the operating system, you get a blank canvas, and all UI elements are drawn by application. Flutter team put tremendous work to recreate Material UI components and Apple Design System elements internally. Of course, you can also make your own components, and this is a point where Flutter will shine. Creating good looking custom UI elements is very easy, and you will have them working on both Android and iOS. This makes a Flutter a perfect choice for apps with advanced, custom UI designs.
6. Easy Adapting to Different Screen Dimensions
Flutter layout system and declarative nature of framework itself makes writing and fitting views to different screen dimensions easier than in iOS SDK. Making animations is also smoother than in native iOS and Android. Moreover, looking at the roadmap of Flutter, we shouldn’t wait long for support for desktop and web applications.
7. One UI Design
If you want an application that looks native on iOS and Android, we probably won’t recommend you Flutter. This will be explained in the cons section, but now let’s get back to the pros.
With one codebase for both platforms, you will only need one UI design prepared by designers. The cross-platform application usually follows Material Design principles, with only small adjustments for different platforms (which Flutter usually handles by itself) or makes the whole UI look custom, with elements based on the best solutions taken from iOS and Android.
8.Technology Tested by Giants
Flutter is still relatively new (the first stable version was published on December 4th, 2018) but it is already tested in the field by such companies as Google (Ads and Greentea apps, an interface of NEST Hub device), and Alibaba (Xianyu app). Google is a maintainer of Flutter, so this may be not authoritative, but Alibaba with over 50 million users or Reflectly mentioned in “New Apps We Love” category by Apple gives you the idea that you can trust in Flutter as a technology for your next product.
With one codebase for both platforms, you will only need one UI design prepared by designers
9.Access to Device Features
One of the main reasons why people are scared of cross-platform solutions is a problem with access to native features. After all, that makes your app outstand simple webpage is the usage of camera, GPS, or haptic feedback. It could be easier, but of course, you can use these features in Flutter as well.
You have to prepare iOS or/and Android code (in Objective-C/Swift or/and Java/Kotlin) and send data to Dart (which is the primary language used in Flutter) by a special mechanism called platform channels. Flutter core team and community prepared channels for most native functionalities of your phones, so you don’t have to write them on your own. If you want to use something more unpopular (like a native library), channels are waiting for you.
10. Compiled Code: Stable Performance
1. Platform Specific Look and Feel
As already mentioned in the pros section, if you want to make your app follow Apple Design System on iPhones and Material Design on Android devices, it will be better to prepare two separate applications.
Of course, in Flutter, you can check which platform the app is running and render different components on the screen. We use this when we want to display Dialogs/Alerts that look like native ones of the system. However, making a whole application that way will burn more time than writing two separate applications. After all, Flutter is a cross-platform framework.
2. Young Technology
With every new technology comes a risk that it will evolve in the way we don’t want to follow, or maybe (God forbid!) it will be dimmed by the maintainer. The fact that Flutter is sponsored and developed in Google, and they plan to use it in their new OS make this scenario unlikely. Nevertheless, it is good to know about this.
The second thing is, there are fewer Flutter developers on the market than native iOS and Android ones. Personally though, I would not demonize this point, because experience from 10Clouds shows us that mobile developers are willing to learn Flutter, and learning it turns out to be a quite enjoyable experience.
3. Platform Limitations
Flutters own UI rendering nature adds some limitations. For example, if some features are integrated into the UI on native platforms, there must be recreated by the Flutter team. There are two examples that we already identified:
- video player – there are implementations of a video player in Flutter but they look different than the system one (especially on iOS).
- iOS profile data completion – do you remember this email or password prompt above keyboard? This feature is not supported in Flutter (yet). To overcome this problem you have to write native view for a text field in iOS and embed it in Flutter (yes, this is possible and we tested it on exactly that case). NOTE: SMS code suggestion works in Flutter without any code changes.
Solving these problems is possible, but it is also time-consuming.
4. Handling of New System Features
All new features of iOS and Android will be introduced in Flutter later than in their native SDK-s. You will have to wait until your application can support foldable screens or dark system mode. However, the truth is that in native development we usually can’t add new system features from release day because we have to keep system compatibility.
5. Native SDK Knowledge
In every Flutter project, you will need people experienced with native development – from simple things like building an Android version, through more complicated, like flavors and making builds on iOS, to writing native views for both platforms. In 10Clouds, we are in a comfortable situation – we can always ask native developers for help. But if you consider creating your own team, you have to keep in mind that Flutter developer must be open minded for both platforms.
So, is Flutter Good For Your Business?
As you can see going full steam ahead with Flutter is not a decision that you can make in no time. There are more pros than cons, that’s true, but if you will push on implementing many platform-specific features or different UIs for both platforms you will lose all the advantages of that framework. It will also complicate your code and may result with problems in future development. On the other hand, you will get your app faster, and faster development saves you money and allows to validate your MVP idea quicker.
This blogpost was updated in July 2020 to include the latest Flutter developments.
It's been more than a year since I wrote this article. A year is an eternity in technology and computer science. During this time, Apple made the move to processors for macs; Microsoft bought Github, and SpaceX became a private company taking astronauts into space.
It also was a significant year for Flutter. We had big Flutter conferences (I attended Flutter Europe) and two substantial online Flutter events organized by Google. During the course of the year, we also had many updates to the core library and many new third-party libraries.
With all of this in mind, I took a look at this article and decided to update it in light of what we know now. Some topics have changed during this time, and I’ve also added a couple of new points. I hope you find it useful.
Update: 6. Easy Adaptation to Different Screen Dimensions
Last year Apple introduced SwiftUI, a new declarative framework for writing UI. This framework makes writing UI on iOS very easy. And with this year's WWDC announcements, SwiftUI code will be portable to macOS and iPadOS. On the other hand, the Flutter team has worked hard to bring desktop and web support for Flutter. It's still not production-ready, but it works and can be used for internal or not end-user tools.
Update: 9. Access to Device Features
As I mentioned in the introduction, now we have a lot of libraries for third party providers. I have to write some native code only once, and the reason for this was a bug in a QR Code Scanning library, which I fixed and committed to that library. Nowadays, if you are a mobile SaaS, you should offer your SDK for Flutter; otherwise, you may lose many potential clients.
New point: 11. Animations
Flutter is created with animation support in its foundations. Making custom interactions and rich animation is much easier than in native iOS or Android. Of course, adding animations to the application is a time-consuming task. I don't want to create the impression that in Flutter, you will get an animated app in the same time that it takes to build an unanimated native one. Still, I can assure you that you should consider Flutter if animations play a significant role in your application.
Update 2. Young Technology
The number of Flutter developers on the market has dramatically increased in the course of the past year. Some companies have a Flutter-only mobile department and others like 10Clouds have added Flutter to their existing offer. And I'm not surprised by that. Writing Flutter code is a very satisfying task, so most of our developers want to do just that.
Update 3. Platform Limitations
One of the limitations that I pointed out - the Flutter team already handles autocompletion support on iOS and makes this available on Flutter. The second limitation is that video support doesn't change very much. There are better libraries, but I couldn't find anyone that supports Airplay, for example. There may also be problems with the new iOS Picture in Picture functionality too.
New Point: 6. Bigger Project Size
With Flutter, we are adding a third-party library to our project. The outcome of that is the fact that our application will be bigger in terms of file size. But don't be scared of that. In a current time where people have a broadband internet connection, a difference of 10-20MB on the iOS application is not a big deal. Additionally, Flutter for Android supports this app bundle, making application updates smaller. But you should consider that point when you are creating a demand for countries with reduced internet availability (usually in those cases, you don't need cross-platform solutions and iOS applications at all).
10Clouds is a mobile application development team from Poland. We develop outstanding mobile apps. Check out our mobile services website to get more details or just contact us. We can build an excellent product for your company.
Subscribe to our newsletter
Want to receive a fortnightly round up of the latest tech updates? Subscribe to our free newsletter. No spam, just insightful content covering design, development, AI and much more.