As an iOS developer, I had the opportunity to work with Flutter – the fruit of Google that has divided developers. It quickly gained popularity as a tool aimed at developing cross-platform applications for Android and iOS. 

How does Flutter win over the competition, and where are its disadvantages? For which customers is developing in Flutter suitable? What to watch out for in Flutter? Let me tell you all about it!

Cross-platform capabilities of Flutter

Since we can’t get away from talking about cross-platform, let’s summarise it. Since its initial release in 2018, Flutter’s biggest advantage has been its ability to share code almost completely. One common code is written to all platforms, moreover, using just one language – Dart. Importantly, this applies to the entire application, including the user interface.

As a result, the pace of project development and the speed of reacting to changes significantly increases – programmers can focus on the business logic without going into the specifics of a given platform.

Since Flutter applications are written using only one syntax, the implementation is consistent and transparent, and thus easier to test and understand.

Flutter and Dart

Some might argue that if you learn Dart, you will only ever use it in Flutter projects. Dart is easy to learn at an entry level but has its limitations. You have to write the same thing multiple times because the language is not expressive enough. It lacks protocols, generics are at a very basic level which at times makes them useless.

Don’t get me wrong, learning new languages is fantastic. However, from my own experience, I ended up having to write a Python Dart code generator for one of my Flutter projects. Overall, after changing from Swift to Dart, I really felt like my hands were tied!

According to a 2022 survey, 24.5% of Flutter users found Dart growing slow or unresponsive as their Flutter project grew larger. I have to say, I belong to that quarter without a doubt.

Building from blocks in Flutter

Building an application in Flutter can be compared to building from Lego blocks. A whole plethora of available widgets makes it as easy as it sounds. This means you don’t have to struggle with a ton of code to make something functional and look appealing at the same time.

If you want to implement some more complex stuff or animated things like a foldable app bar, you’ll be surprised to discover there’s a widget that will let you do it with just a few lines of code.

Widgets are combined with each other into larger elements like blocks. The creators designed the standard UI controls so that the possibility of adjusting them through the composition was as large as possible. The way of building the UI in Flutter is super-intuitive, and thanks to the huge number of different widgets, we can achieve results similar to native software.

Flutter’s performance is competitive with native

Speaking of achieving similar results to native – applications that are written in Flutter compile to native code, which in turn increases the speed of their functioning. In addition, the graphics engine tends to run at 60fps, and if the device allows it, Flutter can keep up with 120fps. Tools for diagnosing possible performance drops exist, so there is really nothing to fear in this regard.

With Flutter, the application is pre-compiled into native code. On the other hand, React Native uses the JS bridge as an intermediary between native code and JavaScript code. Code written in JavaScript must be properly translated into native code – and vice versa. Basically, the “middleman” doesn’t exist in Flutter.

Flutter’s dependency hell

On the other hand, dependency hell does exist in Flutter. As Michael Long points out in his article, Flutter lacks support in contrast to iOS SDK and Android SDK. Although this article dates back to late 2020, there is still a lot of room for improvement. 

To give you an example, once I got stuck in a project for almost 2 months due to Flutter’s unstable ecosystem. Flutter’s standard libraries are reinforced by custom libraries created by programmers. However, very often these programmers stop updating their libraries after a year, therefore leaving you with many forks in a project. 

So Flutter can be a hit or miss, as sometimes you may encounter errors on certain platforms without straightaway solutions. This is one of the reasons why Flutter’s makes an impression on me as a prototype. When delving deep enough many elements seem ill-conceived.

Android Apple Flutter

Flutter vs. iOS tools

iOS’s IDE (integrated development environment) is XCode. There was a time when some who were unhappy with Apple’s IDE used a rival tool AppCode. For a moment some users considered AppCode to be the better tool when working with Flutter projects, regardless of the lack of iOS-specific features, e.g. Interface Builder

While iOS developers used visual editors, migrators, and advanced configuration options provided by XCode, AppCode users had to turn to XCode anyway. This led to frustration because of how radically different were the hotkeys, colours etc. Without proper reconfiguration, the frustration was too big to continue working with AppCode.

XCode has been greatly expanded and for example, Live Preview as added, which strongly rivals Flutter’s Hot Reload. When editing the code and pressing “save” Hot Reload immediately replaces the content of the program, but it only works with small changes when making the view.

Launching the app from scratch takes over a minute on a few years old computers as there is no caching of built elements. On XCode, uploading a previously built application often takes 3 seconds.

On top of that XCode Live Preview can show one view in many variants at once: normal variant, dark mode, no data, with sample data. I would consider it a draw between Flutter and XCode with a slight advantage for the XCode Live Preview.

Do Clients Want Flutter?

In my opinion, Flutter is best suited for a small internal development team that needs to quickly create a consistent multiplatform app where native appearance isn’t a priority.

In no time Flutter can provide a single code base, simplicity of changes, high-speed response and cross-platform features. However, this comes at the cost of certain limitations when developing more complex applications. 

If your main business is to sell services through apps, then native is the best. But if you are using apps as a medium to access data, then you want more bang for your buck — and that is where cross-platforms shine.

On the last note, according to the statistics provided by Statista, the use of Flutter versus its biggest cross-platform competitor React Native grew from 30% to 42% between 2019 and 2021. Meanwhile, React Native and other platforms lost their market share in the last 3 years.