Mobile development has always been a dynamic and competitive field, dominated by the Android and iOS platforms. In this scenario, the need to develop applications that perform well on both operating systems has led to the emergence of various cross-platform technologies, with Flutter being one that has been adopted by some significant players in the market.
Historically, the idea of cross-platform development is not new. Before Flutter, several tools attempted to fill this gap, such as React Native, Xamarin, and PhoneGap. The premise behind these technologies is to allow developers to write a single codebase that works across multiple platforms, saving time and resources.
The web already offers a cross-platform solution by nature, being accessible on both mobile devices and desktops through browsers. However, there is a perception that native applications offer better performance, greater integration with the operating system, and a more refined user experience. This is partly due to native APIs that allow direct access to hardware and system functionalities like cameras, sensors, and notifications. Currently, most of these APIs are available in web development, a technology that is incredible and continues to expand its capabilities each year.
The Dart Debate: Embracing a New Language for Flutter
The first point I want to discuss is the recurring criticism of Flutter using Dart as the language to implement applications. Some see this as a downside because it forces developers to learn a new language. The fact is, learning a new language always presents a learning curve for developers. In my experience, Dart is a straightforward language that employs concepts from various other languages, making it easy for developers to grasp quickly. Claiming that learning Dart is a significant barrier is an exaggeration. You can assimilate it quickly, and since it’s not very extensive, it’s easy to find what you need in the documentation.
In my personal opinion, developers should be more open to learning new programming languages. This so-called barrier is more about a tendency to stay within the comfort zone of what one is already familiar with. Another point is that Dart, being a language with a smaller audience, has the advantage of evolving alongside the implementation of Flutter. It has a community and developers who are focused on implementing features that improve the experience, especially in Flutter development. From the perspective of Flutter as a product, this allows for quicker evolution without relying on a lengthy language change process. From a product perspective, this is excellent.
My Take on Flutter’s Design and Structure
Flutter draws a lot of inspiration from modern declarative UI frameworks and the structure of applications that react to data changes. Any developer familiar with current technologies like SwiftUI or Jetpack will notice the similarities. However, it’s worth noting that Flutter predates these frameworks, being more based on the experience of web application frameworks and their components (Flutter calls them Widgets).
In the current ecosystem, there are many similarities, such as frameworks for state management and dependency injection. Larger applications can use library structures and monorepos to help developers organize their projects. Not everything is perfect, though; some limitations regarding metaprogramming require a lot of code generation, which can be a new and confusing concept for some at first.
One significant advantage I’ve noticed during this period is that Flutter learns from the mistakes of native platforms and its predecessors, creating solutions for common day-to-day problems. It even has components with implementations that solve many of these issues right out of the box. This gives the impression that the components are easier to use than their native counterparts, especially in situations like CRUD operations and item lists in the interface.
However, not everything is perfect. Some interface concepts confused me, such as a component whose sole function is to determine whether its child is visible or not, instead of this being a parameter of the component. The navigation part was also confusing and was only resolved for me by using a dependency that transforms everything into routes, similar to web applications.
Flutter in the Enterprise and Business Adoption
Now, my main point is to discuss how Flutter fits into adoption by companies and the enterprise market. A recurring argument is that users prefer the native experience of platforms and that they would have issues with slow and large applications. Regarding the first point, most widely adopted applications increasingly stray from native guidelines. Even when they did adhere more closely, it was usually just a small set of navigation patterns. The argument that apps like Facebook, Instagram, and YouTube follow interfaces defined by Apple as ideal doesn’t hold much weight.
The second point about application performance is highly subjective. No one expects their food delivery app to run at 120 frames per second. Often, there’s a disconnect between technical performance and the product’s objective. Of course, for critical applications, I expect them not to crash or become slow. But for most applications, if there’s a slight hiccup or the images aren’t in high resolution, I won’t even notice. Regarding app size, this truly impacts a very narrow set of products. Generally, users don’t worry about this aspect, and if your product isn’t something users will download in a restricted mobile network situation, it’s not a significant concern.
One significant impact that many companies have been seeking, especially from 2023 onwards, is improving their processes to deliver more features to users, increase profit margins, and enhance user retention on their platforms. With the market becoming more competitive and investment capital more expensive, many companies are looking for ways to optimize their current resources to deliver more to the market. In this context, I see a growing interest in cross-platform solutions for many product scenarios.
With a single codebase, the same team can deliver and fix more bugs, making it easier to avoid halting development due to vacations and other unforeseen events. Besides the process of reducing team size, there’s also a focus on optimizing the existing workforce so they can contribute more to the company’s final results. In this regard, Flutter proves to be a viable alternative for many businesses to optimize their development, especially in mobile.
My Positive Experience with Flutter
My experience with Flutter has been interesting and positive. I believe it is a well-structured technology with a vibrant community. Now that the technology has matured, many companies will likely start questioning the viability of migrating to something like this. Of course, this process will face resistance from developers, as is common with all such transitions.
However, this process is inevitable in the world of technology…