back
214 comments
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.

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.

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?

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.

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!

I 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.

>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).

The 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.
Out of curiosity, do you have any experience with Kotlin Multiplatform and Compose Multiplatform? I would like to know how that compares.
While I've used Flutter since Alpha, I've been away for a few years. A few things have shocked me in these release notes: how come Impeller still wasn't the default engine for all platforms? Also, why are they migrating to WASM if one of the core features of Dart is compiling to JavaScript? Finally, how come multi window support only get viable now, after four years having desktop support?

Honestly, Flutter is an extremely enjoyable development experience I would recommend anyone I care for to stay away from. The fact it's developed by Google doesn't help: it's a matter of time before they kill it like they did with so many UI libraries and frameworks already, specially with JetBrains developing Compose Multiplatform and the Android team going all-in in the Compose strategy.

Flutter operates more like a 2D game engine. It renders its own views, which involves a lot of arithmetic operations, making WASM a more efficient option than JS.
> how come Impeller still wasn't the default engine for all platforms

Because Impeller has had quite a bumpy ride. Even as recently as June I reported a bug/regression with basic stuff (lines with partial transparency on desktop). All my Android apps are still built with --no-enable-impeller because I've had many instances where the app just shows a blank screen due to driver conflicts.

It may be getting close to stable now, but it wasn't a smooth transition at all.

I suppose AI would help for porting your app if you need to? It's not like the old days.
We've been hearing that Flutter is going to be killed any day now for almost a decade. And yet here we are, it's a stable platform that's quietly chugging along with massive 3rd party buy in. Honestly, Google could abandon it at this point and it would have enough momentum to keep going just fine. Where is Compose Multiplatform? Does anyone actually use that, is it even stable yet?
Does anyone know if the original promise of their simple layout model proved itself?

IIRC, the Flutter team mentioned how using just width/height constraints is enough to represent all relevant layouts. This sounds very nice, being so much simpler than Flexbox and miles ahead of CSS Grid ergonomics.

Did it live up to the promise or did they expand the model with Flex/Grid/etc?

It's much easier to fix flutter layout issues than CSS on web in my experience.
The web almost got constraint based layout. Well maybe almost is too strong, but it was a candidate. CCSS.

We got tables and floats instead.

The premise is a bit off. Flutter was never just width/height: the model is min/max box constraints. The core rule is: constraints go down, sizes come up, parent sets position.

Row and Column are just layout algorithms built on that same model, not separate engines added later. GridView uses the sliver system internally, but still doesn't require anything like CSS Grid's general layout model. The render API is open enough for custom layouts too, so packages like https://pub.dev/packages/boxy build directly on it

Of all the myriad projects from Google, how is Flutter/Dart the one that survived the axe? I’m not saying I hate them - I think they’re both really neat - I just don’t understand why Google keeps these limping along with weak support and no clear vision within their broader web ecosystem.
Easy, there are a few google teams that use flutter and the cost savings from not having to have dedicated ios and android teams is very easy to point at to justify the project's existence.

I think Dart and Flutter are very overlooked. The language has completely changed since its release, its statically typed, has null safety, enums, and pattern matching, and is very simple and easy to read. It has fast compilation and a ui framework with hot reload. It's as fast as Js on v8 while using less memory and has the overlooked feature of having very fast, almost 0 overhead, ffi.

I think the importance of good ffi is underrated for these ui languages. For reference, everyone that's using electron has to run two node processes doing ipc over a websocket connection. That's going to waste an absurd number of cpu cycles and memory when you are passing messages around when your app is basically a ui for a cli.

How are they limping? Flutter has completely replaced it's rendering engine across all platforms and they're building out major window management support on desktop platforms.

At some point there's just not much exciting new stuff to add. Flutter is a nice stable platform, I'd highly recommend it.

Google internally uses dart, and I remember hearing that adwords in particular was rewritten in dart at least for the frontend relatively recently.

So they're probably investing in it enough for basic maintenance, but don't really care about evolving the language.

I guess because they have buy-in from within Google? Google Pay, NotebookLM, Family Link, Google One, etc. are made with Flutter.
Most Google's projects that users loved were axed for a reason, typically internal management wars for promotions. Like YouTube really wanted to kill belowed Google Music, so they did. Or Google Pay vs Google Wallet.

Killing Flutter would not promote a manager. For now, of course.

Oh finally multi-window support - I might finally be able to flutter for a simple desktop app side project I've been wanting to build.
Very happy that it's still maintain, because that's the only real framework that allow an easy dev for a decently fast app with one code base that works on linux, windows, mac, ios and android at once.

It's super nice.

Are Flutter and React Native still viable choices today?

I get the impression that more are going for native mobile, KMP or PWA.

Decoupling material and cupertino makes a lot of sense.
Tested lots of flutter desktop apps on Github last year. All have sluggish animation. FPS rarely reached 60.
great for mobile apps, fine for desktops, basically unusable for browsers unless you do wasm, if web can be revamped/improved it can be the best option for cross platform GUI
The one thing I hate about flutter is the ui code having an ungodly amount of nested brackets.
I vouch for Flutter over React Native; we built https://macrocodex.app/ with 16,000+ users already!

And it's completely free no ads, no subscriptions, or donations, for the public benefit of improving health and fitness.

It's a guaranteed weight loss or gain app; results within 2-5 weeks! Don't believe? well just read reviews. We do not have Revenue, so no money to spend on marketing.

OK so that's brief description of what we built now flutter part:

The Flutter development experience is very smooth; you rarely run into any issues, just be careful not to block the UI isolate. Sometimes bad structuring issues or ui bugs may end up blocking your UI.

My experience is in Backend (java, rust, c++, go, ruby, python etc..) and this is the first time i built a mobile app. And same is true for other guys on the team.

Some limitations are from the underlying platform and not Flutter. Initially, I thought the lack of OTA was a dealbreaker (as App Store / Play Store approvals are a slow loop) and Expo might be better, but the lack of OTA made me structure the app differently and it turned out it's not as big of a deal actually.

We also managed to have a PWA app (for nearly free) by using Flutter web, so it also runs on devices which do not support the Play Store or App Store, giving us max coverage across the board.

We tested react native but found it slow (your code runs in Hermes VM so you need to write native code to offload) and dev tools aren't as good as flutters imho. Dart AOT, which is what runs on iOS/Android, is much faster by default, so you'll hardly ever feel any need to write native code. And when you do need to write native code, we use some for WorkManager and HealthConnect it's very easy! Just be careful with R8; you might have to set rules (though most plugins ship with rules these days) but if you are writing native code in java/kotlin you may have to do this on your own, or it can sometimes break things!

I am glad I picked Flutter over React Native! I had my doubts, but I am glad I looked at their "architecture" rather than the hype of the subreddits.

how's Dart for back end development? is anybody using it to build APIs? the syntax doesn't look too bad
Awesome. I'd love if Flutter could also finally get Impeller on Web (I'm tracking the GitHub issues, seems like there's progress at least).

I personally would like for it to pick up some ideas from Svelte.

I just moved out last month, it's just pain after sometime now, it's okay and good for mobile cross, when it comes to desktop, I'd have to struggle to support linux with quick hangs
I've never used Kotlin, but I really enjoy Flutter. Not nearly as much as SwiftUI and the Lord's language, mind you.

Flutter can get you up and running quickly. If I want cross-plaform support, one codebase is hard to beat.

> Linux and Windows now support popup windows, allowing you to build native context menus and utility palettes.

How does such a basic feature only get added so late?

If anyone is interested to see the WASM + canvas renderer performance compared to Android/iOS builds, I've build my app for the web.

The web app is here: https://app.vocabuo.com (completely free) And the links for Android/iOS builds are here: https://vocabuo.com (soft paywall)

To an untrained eye who does not care about dropping a few frames, the web version is almost indistinguishable from the "native" build. Especially if you add it to homescreen from safari to hide the navigation bar.

Is it still that stupid nesting of widgets?

Example: https://grok.com/share/c2hhcmQtNA_e53f2ba6-cac3-49e4-ab95-c9...

the "Text and selection" demo caught my attention, why flutter render the shortcuts bar itself and not delegate this to the underlaying os?
I always find it strange that flutter isn’t built with golang or typescript. Why use a new language? When flutter came out both languages existed so curious about that.

The main reason i can think of is generics not existing initially

Flutter is good on its own but dev tooling and long compile times kills all the enjoyment.
Been waiting especially for multi-window so it can be picked up by Flet.
flutter should 100% drop web target. if you disagree you never used flutter for real, or are lying to yourself while employed by google to work on flutter
> We are actively working toward enabling WebAssembly (Wasm) by default for Flutter web applications, bringing native-like performance to the browser.

lol.

Need to let this project die and invest the manpower + experience into something useful.