If your use case is "typical" like 90% of the apps out there, I think there's no reason to invest in native anymore (I did native Android a while back, so I can't comment if you're coming from iOS). Flutter has very strong developer productivity (such as "press Cmd+\ to auto-reload"), wide array of plugins (now with official Firebase plugins). Heck, somebody wrote a "Visual Basic" for Flutter (https://flutterflow.io/) using Flutter.
Flutter is nice, but "typical 90% apps" can be written with literally anything.
The real problem with Flutter is it's tendency to attract bottom-of-the-barrel cheapskate customers. I don't want to double down on my earlier mistakes and box myself into lower-paid 10% of already lower-paid (compared to iOS) Android development market.
I think it's absurd to say that "developers can press Cmd+\, which is so good that we will accept a ~15% worse UX". The industry has very strongly decided that developer "productivity" is more important than anything else though. It's sad.
Most apps are budget constrained - doing 2x native over flutter budget doesn't get you 15% better UX. It probably doesn't even give you two working apps in the budget. And getting to them you're still likely 2x bugs and worse UX because of the time spent redeveloping common shit.
If you're not budget constrained, have a team that can execute better UX without flutter, and this matters to your app - go for native. But there's so many scenarios where it doesn't.
It depends on the app, but the costs for maintaining iOS and Android separately don’t seem like 2x… with how similar Swift and Kotlin are to each other and Compose greatly streamlining what used to be a real mess (Android Framework), it’s closer to maybe 1.2x or 1.35x. More expensive but not terribly prohibitive, plus it saves some trouble in the future when/if features that don’t play nice with whatever cross platform framework are needed at some point down the road.
Dual native also gets you better portability to new platforms branching off of iOS and Android — for example most native iOS apps can be turned into suitable AR apps for visionOS with two clicks and it does most of the UI adaptations required for you. Flutter won’t be able to do that for years if ever.
I don't think native necessarily bring you better UX, or even better speed for that regard. On my very low end Android device, Flutter apps are more responsive than the native ones.
> The industry has very strongly decided that developer "productivity" is more important than anything else though.
It's not productivity, it's cost. If an app costs twice as much to build for "20% better UX" then that's ridiculous. You can release earlier and spend half the difference on bugfixes/polish/additional features based on what you see in the wild.
Not sure how it's on android market but on iOS app store its pretty rare to have app update (yep just update) that is less than 100MB even though all those apps were native - I know it's pretty crazy but this is were we live.
There are app market analytics tools, which among other things, also check how many apps use cross-platform technology. Flutter is among the most widely used:
React Native: 5.43% of apps (4.18% of installs)
Flutter: 4.22% of apps (1.39% of installs)
It's clear from the ratio of apps to installs that React Native is used by apps that are on average 3x more popular, but that isn't really a sign that the framework is less viable, just that more of the most popular apps are were written using something else - and I'd speculate that in many cases those apps predated Flutter.
I actually find it more interesting that the number of apps written with Flutter compared to React Native is fairly similar. To me, that suggests that Flutter is gaining ground rapidly, because that very much wasn't the case when I first starting using Flutter on my hobby project a few years back.
In any case, your 25% target seems unrealistic for any framework [1]. Unless your takeaway is also that React Native is not a viable target until it too hits 25%.
[1] I'm discounting Kotlin from these stats as it's not a framework [2], and similarly I don't understand why they counted the Android components as a framework.
[2] Actually, I'm surprised Kotlin is this way down in the charts... If native code is now more popular than Kotlin, that could cause compatibility issues now some phone manufacturers are starting to experiment with RISC-V instead of Arm.
> I can imagine many big / popular apps switch to native once they have the resources to do so but start off with cross-platform.
Not really. Startups looking to keep costs as low as possible tell themselves this and there’s a lot of advice out there from people who will tell you the same, but it’s very rare. If you are tempted to go with the cheap option and plan on switching once you have the budget, make your peace with the fact you will probably be stuck with the cheap option forever.
after trying flutter I ended up with react native for mobile, wxwidgets for desktops, both solid and I don't need learn yet another language dart, I actually like dart but there are only so many languages I can focus
Languages are tools, after you learn a couple or so they’re all mostly the same and it’s the quirks that differentiate them. (Yes C and Coq are quite different, just don’t)
Now if you’re talking about ecosystems, package managers, CI/CD…