As a software development company, we prefer to avoid having any technology bias. Every project is different, and having a neutral point of view helps us select the development tools that will be best within the given requirements, time, and budget.
Besides, there’s the Blub paradox, when a developer preferring to use the language or tool of their choice thinks of building apps in terms and logic of this language/tool. So no matter how good an alternative is, it will most often seem to be worse or at least non-appealing as it uses different logic and approaches.
Still, to demonstrate our software development competence to potential clients, we write a lot about tools. So no wonder Flutter has already been majorly discussed in the next blog posts of ours:
- Flutter vs Kotlin in 2021: Top 5 Indicators Comparison that showed that there is no clear winner.
- Flutter. 2.2: Does It Outrun Competitors in 2021? where we revealed that Flutter gets a lot of attention from Google to stay relevant and competitive.
- Flutter vs React Native vs Xamarin in 2021: Pros, Cons, Examples, the blog post showing that statistically, teams prefer to go with Flutter today, though Xamarin remains to be a much more comprehensive option.
- Flutter vs React Native: Comparison for Tech Managers, a blog post helping engineering leaders figure out how to select one tool or another in every single case.
In those blog posts, we covered the basic cons of Flutter mentioned by many other companies. Those are large app size (trouble for competing tools as well), lack of many third-party libraries, and the necessity to learn one more programming language, Google’s Dart.
Still, those disadvantages are addressable in one way or another, so you won’t find a single story when a team switched from Flutter to something else. It’s always the discovery and transition to Flutter that amazes developers so much they decide to write about it.
So is Flutter so perfect? And why does nobody list the downsides and limitations of Flutter? Let us, the Flutter app development company, be the first then.
Flutter’s Freedom of Choice Complicates Maintenance
Flutter allows going with many architectural approaches, each supported by a third-party library. It’s a great advantage when you’re switching to Flutter from another technology, but that also means you can build the same project – even an easy one – in a variety of ways.
First, this makes the idea of clean code unclear and subjective. Second, code maintenance becomes challenging for engineers who didn’t take part in making architectural decisions. So usually, it’s more difficult to get into the project if it is being built with Flutter.
Flutter’s Widget Approach is No Good For Sophisticated Projects
In Flutter, user interfaces are built of widgets. A widget is responsible for both the business logic and the interface element, so the UI simply results from the function that processes changes in estates. It’s a neat and straightforward concept that makes it easy for newcomers to grasp the general idea and basic principles behind Flutter. And it requires you to launch an app to see its user interface (i.e. you can’t see it when you’re developing it in the IDE).
However, in real-life applications, the separation of business logic and user interface is necessary. Many architectural approaches take this separation as a foundational principle. The more complicated the business logic is, the less sense it makes to have your UI done in widgets. And then, imagine fixing a UI element that is at the top of the widget tree.
Flutter is Not the Best Tool for Web Development
If you’re going for a cross-platform development tool, chances are you’ll want to cover the web platform at some point. After all, the web is usually the next most popular platform to deliver apps after iOS and Android.
Just like we’ve already mentioned, apps built with Flutter take more space than they would if written natively since it inserts its own engine into the code. In the case of a web app, that means longer loading times and slower performance (compared to the competitors), which is bad for SEO. And it is especially critical if we’re talking about a progressive web app that is intended to be used on mobile devices as well (and those are considered mobile app alternatives exactly because they demand less Internet traffic).
In the case of web-first solutions, such as a web store, React Native will allow you to get what you need much faster than with Flutter.
Why is that so? Mostly because the existing Dart to JS engine is too simple to allow making complex changes quickly.
Flutter Doesn’t Go Well With Cutting Edge Technologies
Once the new version of Android or iOS arrives, it brings changes that require time for Google to bring support to Flutter. OK, they might be quick enough here for most. But by the end of 2021, the dark mode for iOS devices was still half-done, more than two years since the release of dark mode-enabled iOS 13.
Then, for instance, smartphones with 120+ Hz displays have been on the market for a couple of years. And with Flutter, you still can’t easily reach adequate performance at 120 fps, unlike with React Native or native development tools.
Then, as a Flutter app developer, you’ll have trouble bringing support to Wear OS and Android TV. Due to no native support of Bluetooth, connectivity issues will appear if you’re building an app utilizing it.
Flutter Requires You to be a macOS User
Yes, Flutter IDEs support macOS, Windows, and Linux, so technically, you can go with the system you please most. However, if you’re building a cross-platform app, that is possible on macOS only. Because you can’t build an iOS app on any other platform.
For example, in Visual Studio for Windows, you can connect to a remote macOS-driven machine to do that. So Xamarin allows making cross-platform apps on Windows, while Flutter does not.
Flutter Testing Is Extremely Cumbersome
So let’s say you want to test your Flutter app. First things first, you’ll open the documentation on testing. But it is only a few pages big. It won’t explain how to run the test, including even the simplest actions like tapping on a button or scrolling the screen. If you’re new to Flutter, you’ll spend a few hours going through other people’s guides on that.
Then, the documentation only explains how to run tests inside the app. But what if you want to drive an app from an external test? It turns out there’s no official way of doing that.
Finally, sometimes you’ll use Hot Reload to make changes in the code on the fly without remaking the build, which is really useful. But if, for some reason, you’ll need to make the build again via ‘flutter run’, you’ll lose all generated app data. It means if your test has failed, with this command you will have extra troubles reproducing it.
You also can’t run a specific test or a selected set of them. In fact, for that, you’ll need to write more code so that the unwanted tests would be skipped. So much for the development speed.
Other — Hopefully Temporary — Flutter Problems
Documentation
While most of the existing documentation on Flutter has been improved over the years (if you didn’t have a taste of .NET docs yet), in 2021 you’d still find difficulties learning, say, how to erase app data, or how to make a startup screen. But there’s always a YouTube video or a Stackoverflow answer that’ll help you get where you want.
Hot Reload
A feature promising to make changes to the app on the go isn’t as smooth as it sounds. As a Flutter app builder, you’ll be unable to use Hot Reload and will be forced to make full-fledged builds (that might take up to a minute) every time when your laptop goes to sleep, when you expect the Flutter app to restart during debugging, and when the network connection is unstable.
Bugs and issues
Oh, you’ll find them a lot. Missing widgets. Confusing APIs. Engine bugs causing UI stutters. If you’re using Android Studio, then the Flutter plugin for it is so buggy its inspector view fails every few times.
Flutter’s Biggest Problem: Immaturity
One of the most mentioned cons of Flutter has been its immaturity. Indeed, it’s the youngest cross-platform development tool among its competitors, and knowing the number of projects buried by Google, it’s no wonder enterprises have been hesitating if Flutter is a good choice in the long perspective.
But the problem is not the immaturity itself but the consequences it brings.
First of all, we’re talking about the necessity to use community workarounds for things that are not yet implemented. And there are lots of things to improve yet: the Github Issues page alone lists 5k+ of them, some dating back to 2016.
And using community workarounds in business is a separate pain in the neck for a typical Flutter company: they can’t be sure if the author continues supporting the library if it was written well, if it is secure enough, and so on. Some of those solutions will be too functionally limited, and others will target the wrong platforms.
Another problem is older project support, especially when you need them to support new mobile SDKs. In most non-Flutter cases, you can simply update the SDK and the library versions. The number of changes for native apps will be relatively small.
But with Flutter, if the libraries and SDKs your app supports are 1-1,5 years old already, the amount of code you’ll need to update for current SDK version support is hard to imagine.
Flutter immaturity means it is still not ready to show great web performance, support enough 3D libraries, have Unity integration, and so on. In other words, its complexity is too limited. That’s why in most cases, Flutter’s single codebase won’t be enough to achieve proper platform-specific UI and UX in the case of a mobile app. And that’s why most ad mobile platforms still don’t support Flutter.
Bottom Line: Is It Really So Bad For Learning and Using?
Flutter can be compared to a muscle car: a powerful but resource-consuming tool that is great for specific cases and not so great for all others.
Because of its explosive popularity, many seasoned companies which know how to build digital products started shifting to Flutter. And since they have expertise with so many other technologies, they eventually achieve desired results. That’s what happened with Zutobi when we migrated their platform from React Native to Flutter for the sake of further growth and scaling.
But suppose you have no prior experience in app development, or just consider Flutter for your next project. In that case, you should be extra careful and make sure that the short-term benefits you get won’t be zeroed by the disadvantages and limitations of this development tool in the long run.
Still have questions? Let’s talk: we’re offering a free consultation with our industry experts and top-tier engineers if you have an idea of an app to build.