Flutter is a Bad Choice for You (Unless It’s Not)

Photo by K8 on Unsplash Is it related to the article? I don’t think so, but do you even read articles without a poster image? :) Photo by K8 on Unsplash Is it related to the article? I don’t think so, but do you even read articles without a poster image? :)

Today I read an article that mentioned some significant issues with Flutter, and I believe these problems will be around for a long time. If you’re not familiar with the issues, I recommend reading:

Flutter issues make apps look cheap and untrustworthy.

You might be wondering:

Should I use Flutter at all if it has so many issues that make my app look off?

Let’s discuss that!

What really matters?

What do you think makes apps great? Beautiful design? Exceptional user experience? The value the app brings to users? The cost of building? All these things matter, but their importance can change depending on the situation. Your priorities can lead your app to success or failure.

User interface

Everyone — especially developers — wants their app to look and feel great. Users expect polished experiences, and design plays a big role in that. But here’s the truth: you can’t create a truly native-feeling UI with Flutter.

Flutter is great for building beautiful UIs with custom designs, but UI isn’t just about looks. It’s also about what users are used to: platform-specific behaviors, gestures, animations, and small details that feel “off” when they’re not native. For example, iOS users instantly notice when something feels unfamiliar, even if they can’t explain why.

Even if you try to use Cupertino widgets, it still won’t feel 100% native. Animations, text rendering, and interactions are just slightly different. And since your app lives inside the larger iOS system UI, these differences are noticeable.

You might hear things like “great apps have their own design language,” and that’s true. But native-feeling motion, text, and gestures are still key to a seamless experience. And that’s where Flutter falls short.

One of the most mentioned examples of a “great UI built with Flutter” is Wonderous. To be fair, it looks great. I really like what the engineers achieved there. But let’s be honest — it doesn’t feel native at all. Would you want your Phone, Messages, or Calendar apps to look that different from the rest of iOS? Probably not.

So, yes, UI is important — but it’s just one piece of the puzzle. There are other things that matter just as much, if not more.

Product experience

One of the most critical aspects of a successful app is the product experience — how users feel when they interact with your app. This includes not only how it looks, but how intuitive, smooth, and satisfying the overall flow is. A great product experience can turn casual users into loyal ones, while a poor experience can cause them to leave after the first use.

When designing an app, it’s essential to think beyond visual design and focus on the overall journey: how quickly users can achieve their goals, how consistent and logical the interface is, and whether the app adapts well to different usage scenarios.

While using Flutter, you may face some limitations in product experience, such as the previously mentioned less-than-perfect UI compared to native platforms. However, aside from that, Flutter gives you almost complete freedom to craft the experience you want. In short, choosing Flutter won’t significantly limit your app’s product experience

The value your app brings

Another key factor in your app’s success is the value it provides to users. No matter how beautiful the interface is or how smooth the product experience feels — if the app doesn’t solve a real problem or provide meaningful benefits, users won’t stick around.

Value can come in many forms: saving time, helping users learn something new, simplifying daily tasks, providing entertainment, or offering a better way to do something they already do. The more clearly your app delivers that value, the more likely it is to succeed.

It’s important to understand that the core value of your app is independent of the UI framework you choose. Whether you’re building with Flutter, SwiftUI, Jetpack Compose, or any other tool, the technology behind the app doesn’t define its value. What matters is the problem you solve and how effectively you solve it.

Cost of building and time to market

When building an app, cost and time to market are critical. No matter how great your product is, if you can’t release it quickly. Think of it like building a car — if it takes you years to finish, by the time it’s ready, everyone will have moved on to something else. Similarly, if you spend too much time or money developing, you might run out of resources before you even get to launch.

Flutter excels in this area by providing a suite of tools designed to speed up development and reduce time to market. Hot reload, for instance, allows you to see changes instantly without rebuilding the entire app, saving both time and frustration. On top of that, Flutter has powerful integrations like Shorebird and Serverpod, which streamline backend integration and make it easier to fix bugs quickly without waiting for approvals in app stores.

With these tools, you can focus on building features, iterate faster, and get your app in front of users sooner — all while keeping costs as low as possible.

When NOT to use Flutter

If you need an app without compromises, without “junk” or “off feelings,” and you have enough resources to maintain two separate applications for both platforms, go native. There’s no reason to choose Flutter in this situation. The only thing you’ll gain is regret, as you’ll never achieve your goals (native look, uncompromised performance, etc.).

Also, if your app is only for iOS, there’s no reason to use Flutter. Just go with Swift/SwiftUI/UIKit. These will satisfy all your needs without any additional hassle. Whether you’re a solo developer, part of a small team, or a large corporation, it’s about meeting expectations.

When to use Flutter

In the real world, especially when resources are limited, time to market is one of the most valuable assets. The faster you can launch your app, the sooner you can test your idea and gather feedback from real users. This helps you avoid wasting time on a project that might not be viable. Flutter’s ability to rapidly develop and iterate is crucial in these situations.

Coffee shops, gyms, stores

One of the most overlooked use cases for Flutter is in small and mid-sized businesses, where the app is not the central product but simply a tool to enhance the business. Examples include apps for coffee shops, gyms, or retail stores. These apps usually serve a straightforward purpose — collecting loyalty points, providing simple membership features, or displaying essential information like opening hours or promotions.

In these cases, there’s no need for the app to feel native. The priority is not perfect animations or platform-specific UI behaviors. What matters is that users can easily interact with the app to receive basic benefits. Businesses don’t want to spend extra resources on a sophisticated app when a simple, functional one will do the job.

Flutter is ideal for such cases because it allows you to build a functional and cost-effective app quickly, without the need for complex UI adjustments.

Pet projects

Flutter is also a great choice for personal or small-scale projects. If you’re building something for a small group — like an app for your tennis club to track scores or a simple app for your speaking club — Flutter is perfect. It doesn’t require a deep focus on platform-specific features, and you can quickly develop a working prototype that serves the purpose. These apps might not require advanced UI or complex interactions, so Flutter gives you everything you need to build and deploy your project.

Minimum Viable Product (MVP)

When you’re developing a startup or testing a new idea, speed is critical. The MVP phase is all about getting your app to market quickly to validate your concept. Flutter is particularly strong in this area because it allows you to develop fast without sacrificing too much on functionality. Even if you plan to rewrite the app in native code later, Flutter can help you get your idea off the ground quickly, test it with users, and pivot if necessary.

Flutter is not perfect

Like many things in life, Flutter is not perfect. While it allows for fast development, there will be limitations, especially if you prioritize a truly native feel. Your app might have quirks or “off” elements, and when you need platform-specific features (like custom widgets or native APIs), you’ll have to rely on native tools.

Don’t be fooled into thinking Flutter can handle everything. Once you need deeper platform integration, you’ll need to tap into native development. That said, Flutter still makes it easier and faster to bring ideas to life, offering a more cost-effective approach compared to traditional methods. If quick development and validation are what you need, give it a try.

P.S. What about the competitors? React Native and Jetpack Compose share similar issues with Flutter. React Native is a great choice if you’re already familiar with JavaScript. As for Jetpack Compose, it’s still in development, and despite its advantages, it’s not always production-ready, and even when it will, it will have the same issues.

P.P.S. Here is a list of apps that will make you understand what is a problem with UI in Flutter not just words:

  1. SNCF Connect — Sheets have safe area issues (could be fixed in no time, not a particular Flutter problem, but in native you don’t have things like this by default). A good example of an app that doesn’t require exactly native feelings but still does the job.
  2. Reflectly — Here you can see what is “a little bit off” in terms of the overall great design.
  3. Wonderous — The app that is way easier to build with Flutter than in SwiftUI/UIKit.
  4. Flutter open source apps list — These aren’t production apps, so don’t expect a polished design, but here you can get a glimpse of typical Flutter UI ( with no design of course ) and how it differs from what you get for free with SwiftUI.