So…
I spend last 3 months building a cross-platform app. It was for a MVP version of a platform of a startup that I joined.
Important: I was solo developer.
The deal with KMM ( as you said) is that you need to write UI code for each platform.
If you are in position to afford that (e.g. you already have couple people/several teams), then it’s a really good way to go. I saw several points of feedback, where people where questioning how much they were able to share between platforms with KMM. But I guess that’s a bit subjective.
If you are solo developer, without much prior experience with mobile - I would recommend going with Flutter or React Native.
I spend probably a solid few days reading everything that I could about which one of those I should pick. I went through forums, SO’s, subreddits (both for RN and Flutter).
General consensus is:
• React Native is more mature, and in general you can do everything you want with it (different UI’s, integrations, payments and so on)
• If you are coming from a web dev background (especially with React) - RN will be a huge productivity boost from beginning (you can use almost everything you are already familiar with, except for things like Navigation).
• There are things like Expo that allow you start developing RN apps really quickly, and easily test them on real devices
• There are ready infrastructure (CI, updates with release, tooling) for RN
But… Flutter is just a better technology.
It’s built from ground up. It’s cohesive. It’s performant. It has great tooling (Android Studio).
I picked RN because I was not in position to invest 2-3-4 weeks to get familiar with Flutter. But I would do exactly that if I could.
I now observe how another team is starting with Flutter, and it looks really promising.
However there are several issues with Flutter, because of how new it is. Especially when it comes to integrating 3rd party SDK’s (e.g. showing ads, or doing in app purchases). There might not be ready-to-use library for that.
Ah. And I also don’t like Dart as a language. In latest Dart release they finally added nullable types, so it might become better.