What is Flutter? A Comprehensive Overview for Product Owners
Understanding the specifics of Flutter can be challenging if you’re new to technicalities related to app development.
Nevertheless, as a future product owner or a product manager, you should know at least some basic facts about this technology.
On our blog, we’ve already discussed Flutter’s pros and cons and shared many tips for developers.
This time, we approach this topic from a different angle and pose the elementary question—what is Flutter?
This article is for those who want to:
- Choose the best technology for their app project.
- Get a general understanding of how Flutter works.
- Know the main differences between Flutter and its popular alternative, React Native.
- Get answers to the essential questions regarding app projects and Flutter.
If it sounds like something you can use, read on.
Key takeaways
- Flutter is an SDK (software development kit) that allows the creation of various types of apps with a single codebase.
- It supports mobile apps, web apps, desktop apps, and even apps for embedded devices.
- Flutter was released by Google in 2017 and has since gained popularity due to its fast development cycle and ability to share code between different platforms.
- It is based on the Dart programming language, which offers advantages such as faster app development and sound null safety.
- When comparing Flutter to its alternative, React Native, there are significant differences. Flutter often ensures better performance as it doesn’t require a bridge to communicate with native elements, resulting in faster compilation and improved app speed.
- Flutter also offers a wide selection of widgets and allows for immediate visual feedback with hot reload. This shortens the time to market, making it advantageous from a business perspective.
- Widgets play crucial role in Flutter apps because software developers use them to build the user interface.
- Flutter’s architecture consists of several layers. The Embedder, the rendering engine (Impeller, Skia), and the Flutter framework. The architecture model for web apps is different.
What is Flutter?
Flutter is an SDK (software development kit) that enables the development of various types of apps with a single codebase:
- Mobile apps (iOS, Android)
- Web apps
- Desktop apps (Windows, macOS, Linux)
- Apps for embedded devices (e.g., IoT apps).
To better understand this definition, you should know that SDKs are software developers’ tools for creating and debugging apps.
In practice, this means Flutter allows sharing a significant amount of code (but NOT 100%) between apps for different platforms. As a result, you don’t need to write every type of app from scratch, which enables a fast development cycle.
Flutter is a relatively new cross-platform technology. Google first released it in 2017. The following year, a stable version was launched. The last version, Flutter 3.22, appeared in May 2024.
Flutter is an open-source framework, so anyone can modify its source code and contribute to enhancing it. The Flutter community is constantly expanding, which allows fast growth of this technology and improves troubleshooting.
Is Flutter a programming language?
Flutter is based on the Dart programming language. It’s a type-safe, object-oriented language. It supports sound null safety, so you can avoid hard-to-debug errors related to variables set to null.
Dart enables faster app development and facilitates testing/debugging. Primarily thanks to JIT (Just-in-Time) compiler and hot reload that displays changes made in the user interface (UI) in real-time.
Before the release, the app gets compiled in AOT (Ahead-of-Time) mode to native code adjusted to a platform, so no bridge is needed for communication with the OS components. That’s one of Dart’s most significant advantages over other programming languages that enable developing apps for multiple platforms.
Flutter vs. React Native
Flutter’s well-known (and older) cross-platform alternative is React Native, which uses JavaScript. They are both reactive frameworks that automatically update the UI and adjust it according to changes in the application state.
Nevertheless, there are significant differences between these two mobile app development frameworks. First of all, in many cases, Flutter ensures better performance. Unlike React Native, it doesn’t need a bridge to communicate with the platform’s native elements, which speeds up the compilation. As a result, the app can work faster.
On top of that, Flutter comes with a wide selection of widgets, and thanks to hot reload, developers can see the effects of their work immediately.
Automatic updates are also important. In React Native, making changes is not equally simple.
Because of all these factors, time to market is shorter, which is an essential advantage of Flutter from a business perspective.
Popularity of React Native and Flutter
To be fair, React Native has a bigger community than Flutter, and more software developers know JavaScript than Dart, so learning React Native is easier for them. According to the Stack Overflow Survey 2023, Dart is still less popular than JS. However, JavaScript is more widely used (not only in React Native or React), while Dart is mainly needed for Flutter.
On the other hand, the same survey shows that Flutter is more popular than React Native itself (9.12% vs. 8.43% in the Other frameworks and libraries category). According to Statista, Flutter was the second fastest-growing technology skill in 2023.
Even when you look at Github, you can see that Flutter has more stars than React Native (163k vs 116k in June 2024), which means more people have marked this solution as their favorite. Such popularity indicates that we’ll likely see many new Flutter apps in the foreseeable future.
Flutter apps vs native code
Native apps are an alternative to cross-platform technologies such as Flutter. They are developed with a specific platform in mind, so Kotlin apps are made for Android, and Swift apps work on iOS devices. Their size is smaller, and they ensure a native experience.
On the other hand, building two native apps separately for Android and iOS takes more time and money than developing the Flutter app. As a result, a cross-platform app appears on the market earlier.
Flutter’s architecture – basic info
Now, let’s delve into some technical aspects.
You should know that Flutter consists of several layers:
1) Embedder – it’s platform-specific and written in several languages, which enables it to work on different operating systems (e.g., Android or iOS). Embedder manages app packaging and native plugins and determines the order of events (event loop).
2) The rendering engine (Impeller or Skia) written in C/C++ rasterizes composited scenes when new frames are needed. It’s also responsible for the low-level API implementation that underlies Flutter’s core, among other things.
Impeller is currently a primary engine in iOS apps, and so is Skia on Android, although developers can optionally use Impeller. This Flutter engine will replace Skia on Android in the near future. Why? It’s more effective when it comes to using Modern graphics APIs, such as Metal for iOS and Vulkan backend for Android, and renders animations much faster than Skia. It also enables better, more stable performance.
Last but not least, Impeller apps are smaller, which speeds up the updating process.
3) Flutter framework—It’s written in Dart and includes layers of libraries with customizable widgets and APIs for development and debugging tools.
This framework consists of:
- Foundational classes and building blocks services
- The rendering layer – it enables software developers to create trees of renderable objects that play a significant role in layout design. Render objects from this layer have their matching classes in the widgets layer.
- The widgets layer – everything you see in Flutter apps is made from blocks of widgets because they build the UI. They are hierarchized in a widget tree that determines which widgets are parents and dictate the context. Flutter developers spend most of their time working on widgets. They are customizable, and you can also build new ones.
StatelessWidgets and StatefulWidgets are the two main types of widgets. We can also classify them based on their usage. In such case, we get several segments of widgets, such as Accessibility, Animation and Motion, Basics, Cupertino, Layout, Material Components, Styling, etc.
- The Material and Cupertino libraries – they are indispensable for implementing design elements characteristic of Android (Material Design) and iOS (Human Interface).
Flutter web apps
This architecture scheme presented above slightly differs from that of Flutter web apps.
The framework in Dart is compiled into JavaScript. It enables displaying content in a browser by rendering it to HTML (using HTML, CSS, Canvas, and SVG) or WebGL (CanvasKit). The former approach optimizes the code’s size, and the latter ensures better fidelity, and processing of the browser’s graphics stack takes less time.
Questions to ask when considering Flutter
When you consider using Flutter in your project, get to know answers for the elementary questions that you can find below. They should give you an idea of what Flutter can and cannot do.
Q: Do I need to introduce all features for Android and iOS at the same time?
A: If the answer is YES, then Flutter is worth trying. Why? When you develop features separately for iOS and Android, it takes more time than when you make changes only in a single codebase.
Example
When you have an app with a paid plan, you want all users with a subscription to receive the same features. The sooner you add it, the better. In this case, having a Flutter app would be beneficial because one developer can make and implement all the necessary changes simultaneously.
Remember that some features cannot be developed solely with Flutter SDK. Sometimes native code must be integrated with Flutter.
Q: How big is my budget for this project?
A: In general, Flutter is a more affordable option because instead of two developers working on a separate app for each platform, there’s just one who builds them both.
However, it doesn’t mean the project’s cost will be lower by half. Testers need to examine the app on the same number of devices, and the time required for project management will also be similar.
Q: Do I want to develop apps for Android and iOS, or will one platform be enough?
A: If you need a solution for just one platform, a native app will probably be a better choice. This technology ensures the best performance and native apps are smaller than apps for multiple platforms.
However, when apps for both Android and iOS are required, Flutter may be a good choice, as it saves time and money. You can even release the Android app first and then the iOS one if you don’t find it necessary to enter the market with apps that work on two platforms. There’s no need to publish products on Google Play Store and App Store at once.
Q: Do I plan to develop a PC or web app?
A: Even if you don’t need a desktop or web app now, you might want it in the future. Flutter applications could be a better option in such cases because they enable you to enter new platforms without building web or PC/macOS apps from scratch. You will only need to reuse the same codebase you use for iOS and Android. Of course, it must still be adjusted to the new platform.
For example, the layout created for a mobile app will differ significantly from the one used in desktop apps. The same goes for keyboard gestures. Developers must add and rewrite all such elements.
In summary, using Flutter SDK will shorten the web app development cycle if you already have Flutter mobile apps. However, a single codebase doesn’t mean all apps are exactly the same – changes are always necessary when you move from one platform to another.
Q: Do I want to develop an IoT app?
A: Flutter may be a perfect option for those considering building apps for smart TVs, home devices, etc. It supports embedded devices, so it should be ideal for many IoT apps with no need to use out-of-the-box solutions.
Nevertheless, not every IoT app is the same, and choosing Flutter depends on individual requirements. If you plan on building such software, you can ask your app development team to analyze your concept with this cross-platform technology in mind.
For more details, look at a case study for the Toyota app.
Flutter app development services at Holdapp
If you’re considering cross-platform development, our Flutter team is here for you. We’ve been building mobile apps since 2012 and have experience in web apps as well. Check out our portfolio for more information.
How can we help you?
Before recommending the technology, we conduct thorough market research and ask you to tell us more about your needs. The goal is to get to know your business and industry better.
When we understand the requirements, we choose solutions that enable the best app performance and are adjusted to your budget and time limitations.
As a result, you will know how to proceed with your project to achieve the best results possible. Contact us to learn more.