For research, we recreated our video calling app for iOS and Android using Flutter. Our goal? To test if this cross-platform framework is truly up to the task for developing resource-intensive multimedia apps. 

Spoiler alert: Flutter more or less does the job, but not without a few serious quirks.

The Experiment: Why Flutter?

Google designed and released Flutter in 2017 to address four main goals:

  1. Enable one development team to build apps for multiple platforms.
  2. Simplify customization across platforms.
  3. Speed up the development cycle.
  4. Outperform React Native (developed by Facebook/Meta) in speed, safety, and reliability.

The framework is built on Dart, a language also developed by Google, with Flutter positioned as an alternative to native development for both iOS and Android. We wanted to see if it could really deliver, so we set out to develop a cross-platform video calling app using WebRTC – with the same functionality, look, and feel on both platforms.

Technical Requirements for Our App

For the sake of experiment, we made the technical requirements as simple as possible:

  • One-on-one video calling
  • Adjustable video resolution ranging from 640x480p to 1920x1080p, based on connection quality

These are the minimum requirements for such an app in 2023.

The app also featured three main screens:

  1. Account login (using Apple ID or Google).
  2. Video call interface for one-on-one calls.
  3. A “room” screen for creating and joining video calls.
The app also featured three main screens
The app three main screens

This setup allowed us to focus on core functionality and performance, rather than complex features.

The Biggest Challenge: Flutter’s Library Dependency

As we started development, it quickly became clear that libraries would be both a key tool and a headache. While Flutter provides some libraries to speed up development, it’s often necessary to pull additional libraries from the Dart repository to achieve essential functionalities. 

The biggest Flutter challenges

Here are some libraries we used and the issues we encountered:

  1. WebRTC – essential for video calls, but required additional third-party libraries for smooth video display (e.g. RxDart library).
  2. Socket.io – caused memory leaks on iOS when connections were interrupted.
  3. Google Sign-In – didn’t support secure login algorithms, forcing us to write extra code for proper authentication.
  4. MethodChannel – while useful for connecting to native libraries, it introduced issues like data conflicts and stream interference.

Each library came with its own set of bugs, and the reliance on third-party support meant higher costs and the risk of code becoming outdated if the libraries weren’t maintained. To keep the app stable, we often had to dive into native code, increasing development time and expenses.

The Upside: Advantages of Flutter

Despite the hurdles, Flutter has some benefits:

  • Backed by Google and an active community, Flutter’s documentation makes problem-solving relatively smooth.
  • Visually, Flutter apps perform on par with native ones, with smooth interfaces and minimal lag

This makes Flutter suitable for simple apps, such as online stores, booking services, and news platforms.

The Reality: Something is Rotten in the State of Flutter

Flutter has built a reputation as a flexible cross-platform framework, but let’s be real—it has some serious challenges. Here’s the lowdown on what you’re likely to encounter.

You Need More Developers and Native Code

One of the promises of Flutter is that it allows you to build a single codebase for multiple platforms. However, achieving this is more complex than it sounds. 

With native development, you’d typically need two developers – one for iOS and one for Android. But with Flutter, the story often changes: a cross-platform project may require an additional developer to bridge the gaps between native features and Flutter’s limitations, bringing your team count from two to three and raising the budget by about 30%.

And here’s the rub: Flutter doesn’t support every native feature right out of the box. To fill in these gaps, you have to:

  • Build certain app modules in a native language (e.g., Swift for iOS or Kotlin for Android).
  • Integrate these native modules back into the Flutter app.

This process works, but here’s the catch – you have to repeat it every time a new feature needs platform-specific functionality. This repetition adds time and drives up costs significantly, as each integration demands careful work from native developers.

Some Serious Security Issues

No app is immune to bugs, but the stakes are higher with Flutter due to some critical vulnerabilities. Security flaws in Flutter’s libraries and frameworks can lead to costly setbacks or, worse, major security risks. Bugs can escalate development costs at best – or at worst, expose your app to lawsuits over data leaks if an unsafe algorithm compromises user data.

A prominent example is the lack of support for Google’s secure authorization algorithms. If you substitute a less secure login algorithm, users could sign up with fake data, compromising your app’s data integrity. This risk can threaten the security of the entire app, making data leaks a real possibility – and potentially costing your business in fines and lost credibility.

To avoid these issues, you’ll need native code to manage security protocols and handle advanced hardware functions. This requirement brings extra complexity to development and extends timelines, making it crucial to weigh the security needs of your app carefully.

When Flutter Falls Short

In our experience, Flutter can indeed handle cross-platform needs – but not without limitations. Here’s a breakdown of how our time was spent across different platforms for a single project:

The estimation breakdown

With this in mind, here are a few app types where Flutter may struggle:

  1. Complex or high-performance apps: apps with intricate architectures, extensive multimedia processing, or intensive device peripheral usage (e.g., Bluetooth, NFC, GPS) often require more than Flutter can offer.
  2. AI and machine learning apps: for applications that rely on machine learning algorithms or advanced models – such as facial recognition or smart image searches – Flutter is likely to fall short.
  3. Resource-heavy applications: Flutter apps are more memory-intensive than native ones, often using four times more resources per screen. This strain leads to faster battery drain, and slower device performance, and can cause users to uninstall large apps to free up storage. For applications with complex interactions or numerous screens, Flutter may not provide the best experience.

For apps that demand these types of high-powered functionality – like streaming services, video/photo editors, or resource-intensive games – native development may be the only reliable choice.

When Flutter Might Be a Good Fit

Despite its limitations, Flutter shines in certain cases. It’s especially useful if you’re working with a smaller budget or building a simple, lightweight app. Flutter’s strengths can be maximized if your app falls into one of these categories:

  • MVPs (Minimum Viable Products): if you need to get a prototype out quickly, Flutter’s cross-platform nature and speed are assets.
  • Simple apps with minimal features: apps without complex interactions or heavy data processing perform well on Flutter.
  • Budget-friendly projects: Flutter can reduce initial development costs if your project doesn’t require extensive customizations.

Some app examples where Flutter works well include:

  • Online stores: where simplicity and speed of release are priorities.
  • Small booking services: basic functionality without heavy multimedia requirements.
  • News or magazine apps: simple content display with minimal interactivity.
  • Data-focused apps: like apps for statistical output, where complex backend work is limited.

While Flutter offers a fast, user-friendly development process for simple apps, for more intricate applications, native development remains the more reliable choice.

Factors That Will Increase the Flutter Development Cost

Project Complexity and Size

If your application involves payment processing and integration of third-party services (for example, payment providers such as Stripe), you will have to pay extra. Also, more complex functionalities that require AI involvement (such as face recognition) will also require additional costs.

Post-Launch Support

Supporting an app on Flutter is difficult and expensive. But you’ll have to do it if you want to provide a pleasant user experience and retain users.

Backend Development

Flutter is only suitable for building frontend. Therefore, another important task here will be to select and create a reliable backend solution that will ensure smooth app performance. This is especially important and relevant for messengers, social networks, and other communication applications. The backend is the key to seamlessly sharing large amounts of real-time data.

Developers

Cross-platform projects in Flutter are typically undertaken by mid-level or junior developers, as experienced developers often prefer native development, considering it more challenging and rewarding. This discrepancy can affect the quality of the app and the developer's ability to troubleshoot complex issues effectively. 

In our own experiment, we worked with a top developer who wouldn’t typically choose Flutter. The developers who would take on Flutter projects often lack the advanced skills to build complex applications with the same reliability or finesse, so projects can suffer in both execution and final quality.

To Sum Up: Is Flutter Right for Your App?

If your project is simple and lightweight – think basic functionality, limited user interactions, and minimal multimedia needs – Flutter could be a solid choice. It’s quick to get started with, offers a streamlined development process, and works well for cross-platform apps like e-commerce sites, booking services, and news apps. For these types of projects, Flutter's advantages can outweigh any limitations, allowing you to deliver a user-friendly, cost-effective app.

However, if your app is resource-intensive or relies on complex architecture – features like real-time data sharing, advanced hardware integration, or machine learning – Flutter's limitations can quickly become roadblocks. In such cases, native development may be a better long-term investment. Although it requires more up-front work and may be costlier initially, native development often pays off in terms of performance, security, and scalability, saving you future hassles and expenses.

So, is Flutter worth it? For simpler projects, absolutely. For multimedia-heavy, high-performance apps? Proceed with caution.

Unsure which direction to take? Contact us or book a quick call for a free personal consultation, and let us help you choose the perfect solution for your project.

Take a look at our other articles too: 

Why PWAs Could Ruin Your Business

Mobile App Development Services Explained – A Guide to Native, Cross-Platform, and PWAs

Low-Code/No-Code App Development vs. Hiring Software Development Pros: Which Path Will Make Your App Rock?

  • Technologies