To be honest I never tried React Native, because you end up with the OEM widgets. Exactly like Xamarin.Forms. With this kind of solution I think the code-sharing percentage will drop when you have some complex cases (unless you use another library to do the rendering, like SkiaSharp in Xamarin). But my opinion might be biased 😅.
You can share a lot of code between Web and Mobile with Dart and Flutter. You can write your server code in Dart, your front-end in Dart using AngularDart, and your Mobile app using Dart with Flutter 😃.
During the DartConf 2018, there were a least two talks about code-sharing between Web and Flutter:
- Flutter / AngularDart — Code sharing, better together (DartConf 2018) (50% of code shared)
- Flutter & Web — Unite your code and your teams (DartConf 2018) (70% of code shared)
You can watch them if you want a deeper explanation.