Since its release in 2017, Flutter has become a benchmark for application development. Initially created by Google for building cross-platform mobile apps, Flutter has gained popularity for its high performance and versatility over the past five years. With many competing options available, what makes Flutter stand out, and what are its potential drawbacks?
Flutter allows teams to create highly attractive, dynamic, and innovative applications with a revolutionary approach to mobile app development. However, businesses often prefer stability and predictability. New workflows, architecture changes, and tooling upgrades can be disruptive. While rethinking app development can boost productivity, it's important to consider the potential pitfalls.
In this article, we explore what sets Flutter apart from other frameworks and examine the disadvantages of adopting Flutter for your teams.
What is Flutter?
Flutter is Google’s flagship open-source tool for building responsive and attractive applications. Released in 2017 for building cross-platform mobile apps, the technology was overhauled in March 2021 to release Flutter 2, a framework capable of building for the web, desktop, and new smart devices.
The release of Flutter 2 addressed some of the platform’s most glaring weaknesses by introducing support for PWAs (progressive web apps), and SPAs (single page applications), and allowing developers to port existing Flutter apps to the web. Introducing features and functionality the technology has been missing since its launch, Flutter 2 has added a suite of improvements to address some of the biggest objections to teams adopting it.
Similarly, The ecosystem surrounding Flutter has grown to include packages and tools for most leading tech solutions. Today, Flutter apps can be built for Windows, macOS, Linux, the web, and both major mobile platforms at once.
Flutter’s Unique App Space
When comparing Flutter to frameworks that target the same platforms and similar goals, consideration has to be made towards how extensive and capable Flutter’s tools are when it comes to application development. Strictly speaking, Flutter isn’t a framework or library in isolation. Flutter is a more complete solution, accurately described as an SDK (software development kit) that includes a wider array of tools and support for application development.
To be clear about each term when it comes to software engineering:
- A library is a piece of code that can be imported into an application to perform a limited function or role. TensorFlow and OpenCV are examples of libraries that can be imported to provide machine learning or computer vision to assist an application
- A framework is a more expansive piece of code that provides an architecture or scaffold for building software solutions on. A quality application framework, such as Angular will provide a stable foundation for developers to build an app on — requiring only that developers fill in the blanks with the specifics of functionality and design
- In comparison, an SDK should contain everything you need in the tooling, support, libraries, and frameworks to build high-quality software. With an SDK, it should be easily possible to build a working application with minimal functionality without any external tools.
Flutter falls into the latter category with a unique rendering engine, front-end components, and the APIs necessary to build successful applications leaning on the Flutter toolset.
Some drawbacks to this comprehensive approach to tooling come from the prescriptive nature of the technology for design and development. By defining specific toolsets, a unique language, and specific workflows with the Flutter SDK there are more limited options when it comes to making the tooling fit your workflows.
Flutter’s Architecture
Flutter’s architecture can be broken into three layers that define how the technology works. The first of these is the foundational layer, a platform-specific embedder that is used to interact with the underlying operating system of the target platform.
The embedder provides access to device services such as input, accessibility, and system threads. The primary role of the embedder is to allow Flutter apps to integrate into the target platform and provide the translations necessary between the two.
The core of Flutter’s technology comes from its engine. It’s this engine that supports the majority of Flutter’s unique functionality from rendering components within apps to the compilation toolchain that builds them. The engine effectively acts as a go-between from the Flutter framework to the underlying system—wrapping C++ code in Dart classes that can be exposed to the developer.
The level at which developers interact with Flutter is typically at the uppermost framework layer. It’s this layer that developers refer to when citing the rich set of libraries and tools the technology provides to support feature-rich application development.
Drawbacks of Flutter
As with any engineering tool or decision, due diligence requires weighing up the benefits and advantages against the drawbacks and pitfalls of the Flutter framework. With Flutter, the drawbacks to the framework can be particularly limiting and prohibitive when it comes to application development projects.
Large and Weighty Apps
Applications created using Flutter, and packaged with its corresponding tools, are inherently larger than apps created natively. Even some competing frameworks can build comparable applications with a smaller footprint. The requirements to include the framework’s engine and widgets with apps means there’s more to package into applications.
With device space often at a premium, this can be a significant factor in convincing users to download an app. This drawback alone almost completely prohibits Flutter from being used to target instant apps due to tight footprint restrictions.
Limited Ecosystem
Despite improvements brought about by the release of Flutter 2, the relative youth and niche nature of Flutter’s language choice makes the ecosystem comparatively limited. Existing JavaScript libraries that other frameworks can freely utilize, for example, can’t be imported into Flutter apps quite as easily.
While this is an area that is rapidly improving in recent months and years, it’s still likely to impact the technology in a big way for the next couple of years.
Limited Community Support
For many of the same reasons that the framework suffers from a limited ecosystem of third-party libraries and tools—the technology also suffers from a comparably limited community of developers. Without the necessary time or widespread adoption to grow yet, both of these are inevitable impacts of choosing any relatively young technology.
A significant part of this hurdle when it comes to Flutter, however, is a result of the framework’s language. By leaning on Dart, Flutter places itself in a unique and relatively isolated position in comparison to tools that lean on JavaScript. As with the ecosystem surrounding the language, this is likely to be a problem that becomes less significant over time as developers get experience and knowledge in Dart and the technology itself matures.
Prescriptive Tooling
Due to the comprehensive nature of Flutter and its associated tools, the technology can feel somewhat restrictive to developers more used to assembling projects from the many available frameworks and libraries out there.
If the Flutter workflow doesn’t fit with your existing practices then it can be a significant challenge to adopt the technology into your firm.
Dart
Often cited as both the most powerful and advantageous features of the technology and also the most significant disadvantage of Flutter, Dart is both flutters biggest weakness and greatest strength. The language is a powerful, productive, and accessible one—but it’s also one that’s seen limited use and even more limited expansion over the last 5-6 years.
Being locked into a relatively niche language when it comes to application development is a factor of Flutter that warrants significant consideration before adopting the technology.
Flutter’s Place
Flutter then, is an immensely powerful and productive tool that is growing increasingly capable with each passing day. With some of the technology’s most glaring disadvantages addressed in its latest update, it’s a tool that’s evolving to play an increasingly large role in modern application development.
Despite recent improvements, however, there are still some significant disadvantages of Flutter that are well worth your consideration before investing in the tooling and technology. Complete due diligence for your firm means carefully measuring the impact of these drawbacks and creating the strategies to overcome or work around them within your development teams.
Flutter FAQs
Q1. What are the disadvantages of Flutter?
Flutter’s most significant disadvantages come from the use of the Dart language. While Dart is a powerful, productive, and highly-reliable language for application development it is one that’s seen limited adoption, features a limited number of additional tools and libraries, and remains relatively niche when it comes to application development.
Flutter itself is also prone to creating apps with a large footprint, resulting in applications being more resource-intensive and cumbersome when deployed to user’s devices. This all but prohibits Flutter’s use for deploying instant apps on mobile platforms and makes convincing users to download your app that little bit harder than a comparable application with a smaller footprint.
Being a young framework, some of the disadvantages that impact developers most is the limited size of the ecosystem of tools and third-party libraries available to help. Also a consideration of leaning on Dart, this impacts the size of the community available to troubleshoot and solve issues as they crop up during design and development.
Q2. What are the limits of Flutter?
Flutter is relatively limited in the number of technologies it can deploy—primarily as a result of the few third-party packages and libraries that it can incorporate. Additional limitations come from the framework’s reliance on Dart as a language for development. Effectively, Dart Forces Flutter developers to look outside the many available Javascript tools and libraries already available that they might be able to deploy for their application.
Even with the latest updates and release of Flutter 2.0, the technology is still only capable of targeting a limited number of platforms in comparison to other technologies or even native development.
Each of these issues are improving over time when it comes to Flutter development, but if you plan to adopt the technology for your upcoming project then you should be aware of limitations to the tools, platforms, engines, and support that are currently inherent to using the technology to build applications