It's easy to setup, install, and it just works. I develop on Windows and Mac with a .NET Core backend and communicating via GRPC. Deploying the backend to a CentOS server. No issues running anything on Windows, Mac, or Linux, surprisingly. Whenever I have to use node, everything randomly breaks when switching environments. (Maybe I'm just bad with node/webpack and all that, but there is way too much I have to know to just build something).
In terms of Node breaking when switch platforms - are you syncing the node_modules folder between machines somehow? Don't do that. Doing "npm install" will sometimes install binaries specific to a platform that won't work across them. Put node_modules in your.gitignore, and sync between machines using version control rather than something like Dropbox. I used to just put the whole project in Dropbox but ran into too any issues between Mac/Windows.
Again, this is coming from someone who doesn't do web dev full time, so I'd probably resolve issues faster if I did, but for my side projects, it's too much maintenance. I just want to be productive if I have an hour or so a day. Flutter lets me do that. I write code, code runs on Android and iOS. It's easy. No react/vue/angular, webpack, bootstrap, scss, typescript definition files, or other 'magic' to worry about.
RN on the other hand bridges the native UI w/ your code via a JS bridge. The downside is the bridge can be a bottleneck so you have to be careful how much you congest it. The result is being able to expose every native functionality and abstract it anyway you want using React extensions.
Flutter plans to target desktop and web, but RN is ready for this today.
Flutter requires you to learn Dart, a Google only language. RN you can use JS or TypeScript.
Are you really going to trust that Flutter & Dart are around tomorrow w/ Google's record? Why oh why would you build your project with something that risky.
I don't think 'emulate' is the right word. It renders it's UI. I don't get 'how the fake is noticeable'. It might be a little bit different, but the average person won't pick it up.
To me, this is one of it's big upsides. It doesn't have to do all the translation to native. The performance is good. It's easy to write. No quirks of either OS. Though you do have to worry about the individual OS's if you're doing something lower level, but you have the power to do so, so that's still a plus.
It's a different approach than RN, but in my opinion, it's flawed.
This isn't anything new in the desktop realm at least. QT vs wxWidgets. QT renders it's own UI, which is great if you are going for your own look, same with Flutter. wxWidgets and RN both shine by being able to wrap the native platform and bridge it.
Eventually your "good enough for the average person" implementation will be out-of-date, and you will always be worse than native, because it's "good enough". That's when you start getting into flaws of cross-platform.
With React Native, it's the exact same, not "good enough". You can wrap any native functionality, and you don't have to maintain copies of visuals and physics for each platform you want to fake.
Yes there are some compatibility issues that you have to address when you try to abstract them, but that will come up regardless of which framework you use.
Currently I'm working on a solution that resolves all of these RN issues across platforms.
P.S. users can tell, they just may not be able to point it out.
RN has to keep the bridge up to date with best practices/deprecation, etc... so that seems like a bigger risk if support was lost. Xamarin did the same and had it's fair share of issues. I'd rather use something with it's own rendering engine. Way less 'magic' that can break.
I don't like coding React/HTML/JS/CSS. It's way easier to write UIs in Flutter IMO. And honestly, I don't even like the aesthetic of native iOS either. I prefer material. I see why web devs would prefer RN though, so there's obviously a huge need for it.