6 ms·
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
by meerita 2mo 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.
- palata 2mo agoOut of curiosity, do you have any experience with Kotlin Multiplatform and Compose Multiplatform? I would like to know how that compares.
- meerita 2mo ago[dead]
- satvikpendem 2mo agoI have. It's still immature compared to Flutter and doesn't necessarily run native compiled code depending on platform, it can still be tied to the JVM. Not to mention how amazing pub is compared to Gradle.
- wiradikusuma 2mo agoYou 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.
- meerita 2mo ago[dead]
- phist_mcgee 2mo agoThey 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.
- zigzag312 2mo agoScrolling is like an Achilles' heel of Flutter. There's still no smooth scrolling with mouse for web.
- 2mo ago
- Degorath 2mo agoWhile 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 2mo agoI 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 2mo agoAh, 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.
- gman83 2mo agoNo framework prevents bad engineering. If a tool is rigid enough to make messy code impossible, it becomes too limited to build anything non-trivial. Aren't you conflating framework design with dev discipline? You can write a monolithic disaster in React, native iOS, or Flutter with equal ease. Bad architecture usually happens when devs copy-paste habits from web or imperative paradigms without adapting to a declarative model. Flutter actually gives you great primitives for clean code. UI components are lightweight config objects, so breaking a huge screen into tiny, modular pieces has virtually zero performance penalty. Its state model naturally separates logic from rendering, making it easy to isolate business logic into testable layers. Plus, the built-in analyzer catches anti-patterns like memory leaks at compile time. all the tools to enforce separation of concerns are there, imo
- sevenzero 2mo ago>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 2mo agoYou'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 2mo agoI see, thanks for clarifying!
- thelollies 2mo agoFunny 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 2mo ago[flagged]
- hypendev 2mo agoAs 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 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!
- deleted 2mo ago[deleted]
- lifty 2mo agoI’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?
- hypendev 2mo agoOh wow, thanks! I never would have thought anyone was keeping an eye on it! Regarding maturity level - I would yet say it's mature for serious applications with OAuth, local storage etc. Late alpha/early beta stage. There are some semi-trivial examples on the landing page - most are just UI + input with DB or API fetching in the background, so nothing spectacular. All of these are crossplatform and render in both web/desktop/mobile and web SDK's or inside the Hypen Gallery apps. Biggest obstacles to maturity currently are: - Does not have native platform channels yet - Renderers need more optimization work - Ecosystem needs more stability - i.e. test mode and studio still have hiccups - Error handling and retry story needs improvement - Some components are still a bit off across desktop/mobile and need syncing - Resource references derived from state need implementing for better DX - Protocol isn't binary yet so performance isn't all it could be But recently things landed that improve maturity quite a lot: - Accessibility defining & automatic inference has landed, where framework does the best it can to figure it out for you with no intervention - Animation API has landed with a minimal DX to enable transitions and animations - Most of tailwind surface is supported and implemented - Performance improvements being released this week land it in "often 30-50% slower, but sometimes 50% faster than react". Will add benchmarks to docs for visibility. - CLI improved by a large margin, with expanded template support and easy building - Cloudflare worker adapter so you can host your app on a worker
- kaycey2022 2mo agoThe biggest negative with Flutter is web. Because most of the UI is canvas-rendered, DOM based tooling like session replay, analytics, accessibility audits, and browser automation require specific instrumentation. That reduces third party choices you have unless you invest in your own tooling and who has time for that. I can't imagine the situation is much better in mobile.
- faangguyindia 2mo agoWhat do you use on Android or iOS for this?
- kaycey2022 2mo agoLike I said I dont have much mobile experience to make a claim. Native apps have their own view and accesibility hierarchy. But even there, React Native would be a better choice because its components become native platform views which would directly be located by 3rd party apps like Appium etc compared to flutter.
- realusername 2mo agoI have a different perspective because I would put all these points as a negative for React Native except hiring. React Native is actually Native so you feel all the pain of the yearly redesign by Apple and Google and the millions of different device quirks to manage which will break your app. You have the Javascript ecosystem which is notoriously janky and hard to maintain over time, even more so as nobody else cares about making it work for React Native, you are a third-tier platform. Then the performance, Flutter is actually more performant than native for very cheap devices (I've tested it), that's why it's so popular in India. The language is unified and doesn't feel as ducked tape as Javascript is.
- sngz 2mo agoother than hiring, everything you said are reasons I'm staying away from react native. Dart has improved a lot and is much better