I picked Flutter and I'm really happy with it. The latest release of Flutter makes me even happier as there are some nice improvements. I'm using Material components because for me it is the bootstrap of UX these days and requires little thought to make a fairly clean UX. As a developer I can just drop in components as necessary.<p><pre><code> * Hot reload, on device, works and works well.
* Really nice error messages (in latest release).
* It is fast.
* Dart is pretty nice once you get used to it.
* Provider api for state management works great (basically, react context).
</code></pre>
I also do a lot of react web dev, but given that Flutter targets web (and desktop now... goodbye electron), I might try that in the future once it matures a bit.<p>Some one is developing this kind of cool example of the web target: <a href="https://github.com/rxlabz/panache" rel="nofollow">https://github.com/rxlabz/panache</a>
I have seen this question before on HN and I think my previous response seems to be relevant to this and should help the OP.<p>This ultimately depends on your situation. I would have said Flutter since it is past 1.0 and RN is still in beta. But my main problem here is that you will quickly run into difficulty in attempting to use C/C++ libraries in Dart.<p>Dart has beta support for native FFI but it is not stable unlike RN. Right now, they instead have 'Platform Channels' which has a significant overhead when passing messages back and forth compared to a native FFI. The issue is still open on Github: <a href="https://github.com/flutter/flutter/issues/7053" rel="nofollow">https://github.com/flutter/flutter/issues/7053</a><p>I can reuse and port my JavaScript/TypeScript projects into mobile very quickly thanks to React Native. Flutter on the other hand, requires learning Dart which depending on your use-case makes sense if it is a new project, not so if you have invested in JavaScript.<p>Perhaps once Dart gains a production-level C/C++ FFI, then I can seriously look at both Dart and Flutter again.
React Native. Not because of the framework, because they both work well, but hiring a JS dev is about a billion times easier than hiring a Dart dev so if you need someone to support you later things will go much better.
Although unpopular on HN: Cordova-based apps with a good mobile look-alike framework can get you very far for a smallish app.<p>Advantages:<p>- truly one code base<p>- iOS, Android, and web apps<p>- JavaScript skills are useful<p>- experience is "good enough" for the average user<p>Downsides:<p>- almost no fine-grained control of input controls (like which keyboard to show)<p>- doesn’t respect users’ accessibility options of the OS<p>- small differences between the native widgets and the CSS/HTML lookalikes<p>- not anymore: performance. It’s really good enough on devices of the last 4-5 years<p>I use Ionic, or more specifically: Stencil with ionic web components.
I love React Native!<p>That said - if you're not familiar with the JS ecosystem (node_modules, etc), then it can seem a bit overwhelming at first, especially when you encounter configuration or build errors. I don't have any great answers for that except that "it gets easier" with more time and practice.<p>Also, if you haven't looked at React Native for a couple of years and had a bad experience before - try it again! It's come a really long way in just a few years.<p>For example: I used to have to worry about cross platform code/libraries working on iOS and not Android - but almost never run into that anymore.
With SwiftUI and Jetpack Compose on the horizon for iOS and Android developers, respectively, you should really invest time into learning those frameworks.
I wrote this article... on the basic differences.<p><a href="https://medium.com/@andrewt3000/flutter-versus-react-native-64ea9204e35f" rel="nofollow">https://medium.com/@andrewt3000/flutter-versus-react-native-...</a><p>I love react for web development, but... idk. If you're interested in material design and don't mind that your app will look like a google app, I would seriously consider flutter.
I think if you are <i>starting</i> mobile app development, learn the basics of the 2 main native stacks (iOS, Android). Preferably learn one of them well. A couple of years ago I might have suggested web (PWA's) as a third kind of 'native' app, but that route seems to have lost traction.<p>In my experience, you'll be a better x-platform developer if you know at least the basics of the native platforms you're targeting.<p>This is not to say that native is the best choice for all apps. You may find that flutter or React Native suit a particular project best. You may ultimately prefer to specialise in one of those. But that's a separate issue from what you should do starting out.
You will get better answers by giving more context.<p>- What are you building?<p>- Do you have short deadline?<p>- Are you building it for yourself or someone else?<p>- How big is your team?<p>- How many devs do you have to hire?<p>- Do you have time and budget for longer on-boarding if your new hires have to learn a technology?<p>- Are you refactoring or replacing an existing software?<p>- Is it just a MVP product?<p>Without context it is just a technology comparison which is somewhat polluted by someone’s experience or may be biased in some communities.
if you're a corporate slave then pick react native because it's easier to find a JOB with it. If you're a dinosaur who started his career coding in Delphi then pick Xamarin. If you want to enjoy development and make some side project/startup pick Flutter. If you don't respect yourself or you are funny - C++ + native views, that's a huge ROFL.
Reasons to use Flutter/Dart:<p><pre><code> * no (or less) native platform quirks/differences
* better programming model than Android SDK
* good performance
</code></pre>
Reasons to use React Native:<p><pre><code> * uses native widgets (if that matters to you)
</code></pre>
My recommendation, write your portable app using Flutter/Dart. If that's not satisfactory, call that your Android version and write an iOS in Swift.<p>Do not fool yourself into thinking either Flutter or React Native will give you native app performance. It can be as fast but the pauses are in different places and users can definitely feel the difference even if they can't articulate it.
We wrote an article on the exact same topic when we were making this decision ourselves: <a href="https://www.mobiledeveloper.net/blog/flutter-or-react-native" rel="nofollow">https://www.mobiledeveloper.net/blog/flutter-or-react-native</a>, to summarize here are the factors that we have considered -<p>User Interface - Flutter works flawlessly with proprietory widgets<p>Development Time - React takes less time<p>Performance - Flutter makes it easy for developers to use the existing code<p>Stability - React is more stable<p>Programming Language - React uses Javascript and Flutter uses Dart<p>At the end of the article, you will be able to pull yourself from this dilemma.
I built an app in React native a few years ago, at the time it looked more mature than flutter. However I had a lot of issues regarding keyboard placement, I still had to write platform specific code, which wasn't too bad your could use .android.js or .ios.js. Android also felt like a second class target for React native. A lot of the css features wouldn't work. It could be a lot better now, but I haven't tried since. I very much believe it would be easier pursuing a PWA or writing native code for each platform.
My pick is what's appropriate for the situation - you haven't described yours so it's not really possible to help you! Flutter is imho Generally Better but there are absolutely going to be cases where RN is going to be less fighting against the system
Wrote a bit about this: <a href="https://beta.trustory.io/claim/1226/argument/3011" rel="nofollow">https://beta.trustory.io/claim/1226/argument/3011</a>. I would also consider Kotlin Multiplatform.
i’m currently asking myself the same question, and i used to like flutter approach. However, after having tried a flutter demo app from the store ( the one comparing vegetables), and seeing it lag on scrolling on an iphone10 , plus seeing that the keyboard placeholder doesn’t follow the keyboard animation ( so you see a white mark behind), i’m seriously reconsidering this option.<p>plus, i feel safer coding my business logic in typescript than dart. It’ll be more useful in case i want to code a web site (flutter web renders to a 2d canvas , which feels wrong for some reason), eventhough dart theorically compiles to js, i feel typescript is more used for that.
We picked React Native and while it's not without its problems in general we quite like it. The community around it is pretty good and being able to use a wide range of JS/React packages is really handy.
These days we have the same questions, but with extra ones:<p>Fluter or Native?
Which the answer is Fluter never ever can be natives, like JAVA and SWIFT, but is good for must of the startups to start quick<p>PWA or Fluter? We don't know
Flutter. It really helps me my daily life.
You can do many things at home without going outside.
Transactions outside can be done inside the house already.
Another neither answer:<p>Kotlin Multiplatform with Jetpack Compose and SwiftUI.<p>Jetpack Compsoe might even become platform independent in the future.
I'm working on a new framework that attempts to take what I think are the best ideas from the web (zero installation, easy to lay things out without tracking measurements yourself) and combines them with the best ideas from React (functions as components, ideally no mutable state). I want to solve what I see as the original sin of the web: inept separation of presentation from content.<p>The other thing I aim to solve is the issue of the browser and corresponding web standards being a monolith so large that only Google and Apple can afford to implement them. By wrestling back control over layout, I hope to show that a next-generation browser could be much more like what James Mickens laid out with the research he presented in this talk: <a href="https://www.youtube.com/watch?v=1uflg7LDmzI" rel="nofollow">https://www.youtube.com/watch?v=1uflg7LDmzI</a><p>I decided to prototype it in JavaScript, and right now it just renders into a canvas element. I love working on it, because all the unit tests run really fast. It can do that because there's no browser in the way - node-canvas is <i>much</i> lighter weight. Once the design is settled down, I'd like to rewrite it in Rust. The other advantage of this is that it is incremental. It'll run in any existing web browser, and building a cut-down browser that isn't web-compatible is doable in a few weekends.<p>The best way to see its capabilities so far is to look at the test screenshots: <a href="https://github.com/maxharris9/layout/tree/master/test/screenshots" rel="nofollow">https://github.com/maxharris9/layout/tree/master/test/screen...</a> - see especially text-actual.png, text-concave-cutout-actual.png, text-diamond-actual.png. I fell down a rabbit-hole with that a bit and made it wrap text around arbitrary polygons, hyphenating on syllable breaks and everything.<p>I just lost my job a couple of weeks ago, and I've been taking time off to work more on this thing. Tomorrow I hope to get mouse click events tracked through the component tree. And at some point in a week or two, when that's done, I really should write the application that I had in mind for it!<p>I know a lot of people have concerns about accessibility with the approach I've taken, and all I can say to that is, please help me work on that instead of criticizing me. I know there is talk about an accessibility DOM coming in browsers, but I fear that I'll just have to fall back to rendering plain HTML in order to drive screen readers, which is a terribly inefficient and indirect way of doing things. Also I don't even know where to begin with screen readers, what's the most popular software for that, etc.