Remix.run Logo
meerita 4 hours ago

I still prefer React Native with Expo over Flutter, mostly for practical reasons:

* Language and hiring: TypeScript has a much larger developer pool. Dart is a solid language, but finding experienced Flutter engineers is harder.

* Platform model: React Native maps much more naturally to native platform concepts. Flutter owns much more of the rendering stack, which is powerful, but also creates another abstraction layer between the app and the platform.

* Performance: Flutter can absolutely be fast, so I would not claim otherwise. My experience, however, is that RN has required less work to get interactions and animations that feel consistently native.

* Ecosystem: RN benefits from the broader React, TypeScript, JavaScript, and native ecosystems. Expo has also improved dramatically and now covers a large part of the usual mobile platform work.

* Platform-specific features: neither framework completely eliminates native code. Things like widgets, Live Activities, Dynamic Island, extensions, NFC, and other platform APIs eventually bring you back to Swift/Kotlin anyway.

* Migration to native: if the long-term destination is Swift and Kotlin, I find RN a better intermediate representation. Its component model and platform integration are closer to native concepts, which also makes the codebase easier for agents to translate incrementally into proper native applications.

That said, these are trade-offs, not claims that Flutter is bad. Flutter has improved a lot, and for teams that want a highly consistent cross-platform UI, its rendering model can be an advantage.

wiradikusuma 3 hours ago | parent | next [-]

You should try Dart/Flutter again, they've improved a lot.

- Dart. It's richer than JS/TS with stronger type safety, and seems purpose-built for UI. Fewer Dart developers than JS, but I'd argue those JS developers cannot be immediately effective coding React Native (Expo) anyway.

- Emulated components vs. real native components. For multi-platform apps, this is actually desirable. These kinds of apps have their own design system.

- Speed. In my experience, it's negligible, but maybe because I keep using the latest version.

- Ecosystem. Flutter/Dart occasionally introduces "breaking" changes (such as migration to null safety, and recently deprecation of CocoaPods). Community very quick to update their plugins and adapt. Some abandoned plugins were immediately forked to keep being maintained.

- Migrating to native platforms, easier for agents to read an RN project. I'd argue it should be _easier_ to do that with Dart since the language is less "ambiguous" than JS.

However it's not perfect. My complaints:

- Not ideal for web apps with lots of FIRST-time visitors, due to initial download. There are some attempts to solve this, e.g. deferred loading, but I think inherently it's unsolvable since you need to download the whole world (a few MBs) to have the app running on your browser. That's why for this scenario I use SvelteKit. But if you already have a mobile app and want to get a web app "for free", this is a useful feature.

- WebView support is inconsistent across platforms (I'm looking at you, Windows and Linux).

- Text fields are quirky on Android TV.

tancop 38 minutes ago | parent | next [-]

> it's unsolvable since you need to download the whole world (a few MBs) to have the app running on your browser

another reason why the web should move from whole app bundling to content addressed CDNs for library code. you would only need to download one copy for each framework version not every site. and its easy to make it decentralized with IPFS if you want.

phist_mcgee an hour ago | parent | prev | next [-]

They still haven't got native scrolling perfect for iOS. I used a big name app just today and I could instantly tell without looking it up that it was a flutter app, because the scrolling felt non-native.

satvikpendem 7 minutes ago | parent | next [-]

This is fixed in the past few versions of Flutter, they likely haven't updated their SDK.

zigzag312 37 minutes ago | parent | prev [-]

Scrolling is like an Achilles' heel of Flutter. There's still no smooth scrolling with mouse for web.

meerita 3 hours ago | parent | prev [-]

[dead]

hypendev 3 hours ago | parent | prev | next [-]

As someone who used all these frameworks professionally for years, I highly agree. Although, I do not prefer Expo due to it's highly annoying build system and dependency hell, but React Native itself in that case. While I understand Google wants a horse in this race, Flutter doesn't feel like a horse to bet on.

- Dart is a really _ugly_ language with lots of tiny annoyances. Its as if someone took worst parts of Java and Javascript and turned them into a language. Terrible to write, terrible to read, terrible to use.

- While there is no Skia anymore, the whole custom rendering of Flutter often caused more trouble than not, from the UI implementation itself all the way to specific low-end chipsets not being supported.

- Ecosystem propagates these insane architectures that don't make much sense and are made to either print apps as fast as possible or to emulate some Clean Code like behavior.

- Web still feels terrible to use, even after all these years.

Since I'm not happy with any of these, I've even taken upon writing a framework of my own that renders into native UI and works with any language (gonna shill it here https://hypen.space). It was inspired directly by years of working with mobile and experiencing the pains of crossplatform development such as Flutter and Expo. We can do better than these!

pjmlp 9 minutes ago | parent | next [-]

Google has two horses in this race, because Android team doesn't acknowledge Flutter and rather go with KMM and Compose, alongside JetBrains.

nmfisher 22 minutes ago | parent | prev | next [-]

> Dart is a really _ugly_ language with lots of tiny annoyances. Its as if someone took worst parts of Java and Javascript and turned them into a language. Terrible to write, terrible to read, terrible to use.

While I’m a bit ambivalent towards Flutter, I totally disagree with you on Dart. To me it’s a better version of Java/Typescript with a very mature cross-platform and JIT/AOT compiler. Admittedly there are some things I wish they would take from TS (like discriminated unions), and I haven’t tried “modern” Java either so maybe that’s improved, but even so, I rarely feel like Dart is getting in the way.

satvikpendem 4 minutes ago | parent [-]

They probably just haven't used the latest Dart versions which fixed a lot of the "ugliness" (which I'd call pragmatism but regardless) like primary constructors where a class can just be a single line now.

And I mean, their entire comment is a way to shill their app so I wouldn't take much stock in what they're saying.

lifty an hour ago | parent | prev | next [-]

I’ve been keeping an eye on hypen.space and hope it succeeds. What is the level of maturity now and are there any multiplatform app examples that are not trivial?

AbuAssar an hour ago | parent | prev | next [-]

hypen looks very similar to SlintUI, isn't it?

3 hours ago | parent | prev [-]
[deleted]
Degorath 3 hours ago | parent | prev | next [-]

While all of the points you brought up are valid, I've hated every react native app I've ever had to work on. Not because of react native itself, but because they usually take random react developers to work on these apps and the structure they create is absolutely horrible to work with (compared to, for example, native apps).

What was your experience on that aspect with Flutter?

meerita 3 hours ago | parent | next [-]

I agree. RN has historically attracted a lot of web developers who treat mobile like a React website, and the result can be terrible. But I've seen exactly the same architectural problem in Flutter: huge widgets, mixed responsibilities, state everywhere, and very little separation of concerns. The framework doesn't protect you from bad engineering.

Degorath an hour ago | parent [-]

Ah, that's a shame to hear. I would only like to add that at least for Android apps that I've been "hanging around" (my team never really worked on them), the teaching materials that are provided have generally made them a lot more pleasant compared to the RN stuff.

puelocesar 2 hours ago | parent | prev [-]

I was forced to migrate from pure native development to React Native and Redux is one of the stupidest things I ever witnessed. Or at least the way the previous devs setup that thing, because it’s so easy to make costly mistakes with it.

I lost so many days of my life profiling and debugging to figure out why hundreds of components were re-rendering when a tiny thing changed somewhere completely unrelated

user43928 an hour ago | parent | next [-]

Redux is great and it solves exactly that problem.

You create a selector. You use the selector in a React component.

The component re-renders when the selector outputs a different value, with the usual reference equality caveat.

Does it get any simpler than that?

However, yes, I have seen most developers use Redux incompetently.

They would use actions like "setOrder" instead of "itemAdded", defeating the purpose of a state machine from the start.

satvikpendem 2 minutes ago | parent [-]

They might have been using Redux before it did a major API change in the form of slices.

tcfhgj an hour ago | parent | prev [-]

> figure out why hundreds of components were re-rendering when a tiny thing changed somewhere completely unrelated

Could you explain how this comes from React Native and/or redux?

I have used Angular with redux (ngrx) and redux made it quite obvious what changed what and why

thelollies 3 hours ago | parent | prev | next [-]

Funny to see speed in there, my experience is the opposite.

Im a very happy Flutter dev and it's always been odd to see so much negative sentiment around it when there are public discussions.

meerita 3 hours ago | parent [-]

[flagged]

palata 3 hours ago | parent | prev | next [-]

Out of curiosity, do you have any experience with Kotlin Multiplatform and Compose Multiplatform? I would like to know how that compares.

meerita 3 hours ago | parent [-]

[dead]

sevenzero 3 hours ago | parent | prev [-]

>real native components

Since when does React Native use real native components? Last time I've checked it wasn't capable of doing ANYTHING with my phones NFC scanner or native camera...

With flutter I can just build a Kotlin component and integrate it easily into my app. Also Flutters performance is extremely good, I dont know what you are on about. Our app is used on extremely old phones and has great performance. (I am not even a professional android/flutter dev, so I didnt optimize for performance).

meerita 3 hours ago | parent [-]

You're mixing UI components with platform APIs. React Native does use native platform-backed views. NFC and camera access are separate concerns. If an API isn't exposed, you can write the native Swift/Kotlin module and bridge it, just like you would integrate native code into Flutter. Camera support also already exists in Expo.

sevenzero 2 hours ago | parent [-]

I see, thanks for clarifying!