Since iOS and Android became the main platforms for mobile app development, creating cross-platform products has been appealing for both developers and app owners. As a result, different technologies have emerged to accommodate cross-platform mobile applications. One of the latest additions to the mix is Flutter. What is Flutter mobile development all about, and what are its pros & cons?
Interestingly, Google started working on Flutter back in 2015, but it remained in the beta stage before it was officially launched in late 2018. Since then, it has definitely been growing in popularity and capabilities. And there are a few good reasons for that.
It started as an open-source mobile UI framework that helped developers build native-looking Android and iOS apps. Not too long ago, however, Flutter started supporting the development of desktop, embedded, mobile, and web apps from the same codebase. And where there’s less code, there are fewer bugs.
Speaking of the competition: despite the fact that React Native and Xamarin are still used more widely, Flutter is on the rise. According to Google's Tim Sneath, this UI framework is now taken advantage of by nearly half a million developers who claim to use it on a monthly basis. With its integrated rendering engine, testing and integration APIs, and ready-made widgets, it’s a solid contestant to other technologies that enable cross-platform mobile development. How is Flutter different, then?
It’s no secret that each solution has its advantages and disadvantages which ease or impede mobile app development to some extent. Flutter has a number of benefits that keep attracting developers and app owners, including:
Relatively fast development, which saves you time, effort, and money (at least at the very beginning, but we will get to that). Like any other cross-platform technology, it allows you to use the same code base for building separate iOS and Android apps. This, in turn, speeds up the whole development process and means that you don’t need two teams working on the code for a single platform.
Flutter’s “hot reload” makes it possible to make changes to the code and see the results immediately in the app preview, without the need to recompile the code. This way, you can easily fix bugs and experiment with different UI elements and features once you’re at it.
Full customisation & fast rendering thanks to Flutter’s layered architecture. It’s said to “give you control over every pixel on the screen” and let you overlay & animate graphics, video, text and controls without limits.
Flutter also works for web and offers proper documentation, allowing you to check how native controls work,
What’s more, it also separates UI from native controls, which eliminates a lot of nuances and errors made by smartphone manufacturers. These might not happen too often, but are difficult to omit with native development. Separate UI also means having a unified view on all system versions without an effort.
Is Flutter all about pros, though? Not quite. We tested it out in practice to see whether that’s the case. Here’s what cons we found:
Flutter is still an immature framework. It hasn’t been around for long, which is why it’s still not entirely stable. A number of more or less problematic issues remain, along with a lack of more advanced features that leverage the capabilities of operating systems. Many of these features are not yet supported, with plenty of libraries being in the pre-alpha stage and showing limitations when comparing them to native counterparts (i.e. Google Maps).
Dart is also pretty immature. When comparing it to Swift and Kotlin, it’s basically like taking a step back - it has either fewer features or the existing ones are not exactly well-refined.
Flutter apps are quite large and “heavy” to start with. They occupy a lot of space and take longer to download or update.
The look & feel is not 100% the same as with native solutions. Basically, Flutter doesn’t create native components. It somewhat replicates Android’s Material Design and iOS-specific components with its Cupertino library, but it’s not exactly the same. It’s visible especially with different system versions where text fields or buttons vary from one another, yet stay the same in Flutter.
There are no single “guidelines” when it comes to developing Flutter apps, which can be problematic when building more complex software.
The framework, as well as Dart language, are changing rapidly at times, which can make maintaining the code difficult in the long run. Plus, given the track record of infamous “projects killed by Google”, the future of Flutter might still be uncertain.
It’s clear to see that Flutter is not mature enough to handle more complex projects, at least for now. At the same time, however, it’s a good solution for an MVP (especially for startups). Actually, it’s a common pattern with all relatively new technologies.
Essentially, whenever you have an idea for a mobile app but you’re not exactly sure whether it’s a good one: build your MVP with Flutter to cut costs and see your idea in action. If the MVP becomes successful, you should start thinking about “turning it” into native mobile apps instead.
Let’s face it: developing two separate apps from the start would take much more time and money. That’s also one of the reasons why startups with limited resources turn to cross-platform solutions like Flutter. Reusing code helps them bring their ideas to life without making substantial investments.
More established enterprises also seem to appreciate Flutter’s ability to build highly-branded experiences that support multiple platforms. If that’s something that might interest you, you should consider giving this cross-platform technology a try.
This doesn’t mean that other cross-platform technologies become obsolete, though. After all, the nature of both Flutter and React Native allows to reduce time-to-market and makes developing mobile apps more efficient, which attracts increasingly more developers and app owners.
Here’s a short comparison of Flutter vs React Native:
The verdict? Both Flutter and React Native have their pros & cons when it comes to cross-platform mobile development. Flutter definitely has its limitations, but the benefits are hard to ignore for specific use cases. Essentially, if you want to reduce development cost & time, and release the app on all available platforms simultaneously - Flutter can be a good choice.
Each app is different, though, which is why you should always go after a solution that can support your goals and strategy in the long run. If you’re not sure what technology to choose for your project (and whether you should actually go for cross-platform mobile development) - give us a shout.
In the meantime, you might also see our comparison of React Native vs Native Apps.