I have been using this to build an app[0] for the last couple of years and I want to say that it has been a pleasure to use, there are some wrinkles but overall I have been very happy with the experience.
Upgrading from v1 to v2 was not too difficult and v2 is a significant upgrade with lots of useful features, massively improved codegen experience and support for tokio async were the big gamechangers for me.
Writing all the app business logic in Rust and using Dart as the front-end works out really well. I know Flutter/Dart doesn't get much love here on HN but in my opinion I think it's much easier to reason about than a system like React which I think is the wrong level of abstraction compared to Flutter's render the entire widget tree approach.
Massive thanks to @fzyzcjy for all the work on FRB, great job!
Could you expand on this a bit? My impression was that Flutter and React had relatively similar approaches to components, but I haven't had much experience with Flutter yet, so I'm interested to hear your experiences!
React = one small piece of a very large required ecosystem (HTML + CSS + Javascript + NPM + React + Vite + ???)
Flutter = a UI framework for mobile/desktop/web (Flutter + Dart)
On top of the purpose built nature, nearly everything is a Widget, even layout/styling making it pretty easy to grok very quickly.
flutter does a so so job on desktop and it's web version is wasm based.
the job market for dart flutter is a drop while react is the lake.
react with electron, react native, react itself together are still the only ones production ready cross platform GUI with widest adoption
comments about job markets aside…
The first and the third paragraphs really haven’t been true for some time now.
Flutter is absolutely production ready as a cross platform GUI.
For ios and android maybe but I doubt for web. Also 12k+ open issues, team layoffs and all founders that left don't brink confidence to flutter. I think also roadmap and progress in last year doesn't look stellar.
On the other hand I think flutter lost a lot of benefits comparing to 5 years ago - now we have stable better swift and swiftui and better kotlin with jetpack compose - those support also apple watch, macos, tvos, visions os, Google wear, Google TV and with current jetbrains compose desktops like windows is already stable.
React native and web ecosystem also improved a lot in the last year.
I keep seeing this coming up and I have no idea where it’s coming from like it’s some self reinforcing feedback loop based on just utter bullshit.
If I am remembering correctly the headcount on the Futter team literally changed by a single person.
Here are some actual real life numbers you can use if you want to gauge the health of the two projects:
1. https://github.com/facebook/react-native/pulse
2. https://github.com/flutter/flutter/pulse
Specifically Flutter’s 108 merged pull requests to React Native’s 1 and Flutter’s 330 closed issues to React Native’s 18.
Also note that this doesn’t even include their rendering engine which had another 90+ closed pull requests https://github.com/flutter/engine/pulse
The truth of the matter is that Flutter is actually is far better shape both from a technical and open source perspective.
I did checked pulse for those on github on regular bases. Change to monthly and notice out of 450commits more than 170 commits are by flutter-engine-autoroll bot just auto updating some packages, then next second user did ~30commits, then you have few another flutter bots with some commits. Then go compare with react native.
You are cherry picking things here. If this is some ideological thing for you I’m really not interested in having that conversation.
The health of the two projects genuinely isn’t close at all. Comparing what they are actually both shipping in terms of features in the last year is two very very different stories.
I'm neither flutter nor react native developer just native mobile dev but evaluating both techs so don't have stake in the game right now. Just showing to other so they can make their own judgement:
Flutter monthly pulse: https://github.com/flutter/flutter/pulse/monthly "Excluding merges, 83 authors have pushed 451 commits to master and 461 commits to all branches" but:
1st engine-flutter-autoroll (bot with revisions autoroll): 185 commits
2nd zanderso (google employee): 25 commits
3rd ValentilVignal (contributor): 14 commits
in top 15 contributors for flutter you have also other bots such as: fluttergithubbot, auto-submit[bot], flutter-pub-roller-bot, dependabot[bot]
React Native monthly pulse: https://github.com/facebook/react-native/pulse/monthly "Excluding merges, 84 authors have pushed 437 commits to main and 575 commits to all branches"
1st cipolleschi (meta employee): 92 commits
2nd cortinico (meta employee): 83 commits
3rd NickGerleman (contributor): 45 commits
no bots in top 15 contributors
Also keep in mind React Native is based on React repo project. On top of that you have a lot of work by community in:
- expo https://github.com/expo/expo
- react native reanimated https://github.com/software-mansion/react-native-reanimated
- react navigation https://github.com/react-navigation/react-navigation
- react native skia https://github.com/Shopify/react-native-skia
All of those packages are highly maintained and are pretty used in all RN projects and considered standard.
super useful info
I personally prefer using many smaller components over using a large opinionated framework. But I'm not a big fan of React, so this could be better and worth a try.
It's less a "large opinionated framework" and more "fewer components overall. There is no HTML/CSS for example, it goes direct from Dart (equivalent to JS) to the Widget rendering system."
Dart has its own build tools and package system that work well. You can still pull in dart libraries as you need them. Dart is also a much better language than JS. I can't tell you how many days I've lost to react/JS build tooling issues. A single problem can easily eat an entire day. With flutter/dart I haven't had a single issue like that.
At a basic level Flutter renders the entire widget tree and caches components that don't need to re-render rather than applying a diff of changes to the DOM.
But it's really the Flutter/Dart API and widgets that make it much easier to work with, if I need to load some data asynchronously I use a `FutureBuilder`, if I need a stream of events I can use `StreamBuilder` etc. Compared to Reacts state, hooks, memo, effects etc. you end up with code that is far easier to reason about what is rendering when and why.
Oh and the real killer feature is Flutters hot reload experience, it's easily the best DX I've seen for GUI work.
As another comment mentioned it really is like night and day. I recommend giving it a try.
I don't quite understand the point about rendering, unless you mean it in the Angular sense (i.e. on every state update, the whole app gets rendered, and elements are updated to the new state during that render).
But I can imagine that the API can be easier. I think React handles state fairly well, but as soon as that state needs to interact with things outside the React world (http requests, continuously updating data, etc) then the current abstractions don't quite feel right.
Yes, that's basically correct:
The `build` method rebuilds the entire widget tree. So "the whole app" does not necessarily get re-rendered, only whatever is in the same widget as the changed state or below it, although potentially that can be the whole screen. Flutter also uses an algorithm to detect unchanged widgets and reuse them,[1] but conceptually the whole thing is re-rendered on state change.
[0] https://api.flutter.dev/flutter/widgets/State/setState.html
[1] https://docs.flutter.dev/resources/inside-flutter#linear-rec...
React doesn't work in the same way? I don't know much about it, but I assumed it does.
I'm not sure. Hopefully someone here can let us know. I didn't mean to imply that react doesn't work that way.
It does work that way. However, Flutter and now React (via their new compiler) are becoming smarter at rerendering, where they will only rerender what has truly changed, not just rerender the entire tree below the changed component.
react and flutter are pretty much the same thing, i do both for a living i am not sure what this person is going on about
They do have similar approaches, I'm not sure what the above commenter is saying as both work basically the same (with React class components at least). Flutter doesn't have hooks but they're addressing that via macros next year, and anyway today there are packages like flutter_hooks and ReArch that enable hook-like functionality in Flutter today.
I’m too lazy right now to get into all of the specifics but just wanted to drop a quick note to say that I’ve been doing web development since 1997 and the difference between React and Flutter is like day and night.
It’s genuinely hard for me to overstate the general quality of life improvements both from the developer experience and the overall quality of the apps I can produce in any given time frame.
A big part of the reason for that is Dart is itself hands down the nicest language I’ve ever worked with. The team behind it got real serious when it comes to tooling and language design and everytime I have to go back to TypeScript I feel like I’m trying to run with a 50kg backpack on.
Flutter is not bad, but I hesitate diving into it based upon who controls it. Using a Google product feels like you're in constant threat of it just disappearing.
It also still has all the remnants of mobile and fingers and not desktop and mouse. Support for improving this is non-existent in my experience.
Why conflate Google's customer facing products with their OSS technology contributions? It seems a weird comparison to make, as if their sales and marketing departments are the ones behind technology decisions.
Angular came out of Google and hasn't gone anywhere. Also GoLang.. even GWT was supported well past its prime and is now maintained by the community. What evidence is there that they abandon languages and frameworks?
In the .NET block down the street, we deal with this kind of nonsense almost daily :) https://news.ycombinator.com/item?id=41195650
To be fair, your linked post encourages ignoring packaging guidelines in linux distributions
I think you actually answered your own question.
The difference is that Angular was already a hugely adopted and relatively simple piece of technology (the difference between a JavaScript framework and all the moving parts and pieces of Flutter/Dart is huge)
Since the latter doesn’t have anywhere near the investment outside Google it’s not a fair comparison. The fear that if Google drops it, it will die are legitimate.
What about the GoLang comparison?
I'm not trying to argue against the fact it would die or not. I'm mainly trying to understand why people think Google would abandon it. Abandoning Google Reader and abandoning Flutter or GoLang are _not_ the same in my eyes, and I can't think of any cases where Google has abandoned a technology rather than a consumer facing product in this fashion.
If this takes off it is only a matter of time before someone creates a rust based engine around this framework that does not rely on Google. For now, one pro of google maintaining flutter is that they also maintain android.
But, Flutter and React work the same way where UI is a function of state. In fact, Flutter started off imperatively but after React was released, they changed it to be declarative, and now Android via Jetpack Compose is changing to be declarative, all on the same general principle. I also use packages like flutter_hooks or ReArch which make encapsulating state much easier, I couldn't stand using initState and not forgetting to dispose for each piece of functionality.
Just want to say, your site is very aesthetically pleasing. I hate blue websites (FB Blue) -- but the deep tones that SOS uses and contrasts are really appealing.
So is the app, subscribed.
Looks nice. What UI design system did you use here if I can ask?
Yeah I really like Flutter/Dart. I had less an issue with React itself than I did the whole HTML/CSS/Javascript ecosystem and tooling. Flutter is a breath of fresh air in that it is a purpose built ecosystem for UIs. You load the SDK and are ready to go with features like hot reload out of the box. No need for gamut of tools and to figure out how they all work together. Also, no need for HTML + CSS! I think the only reason it isn't more popular is because we have such a huge # of frontend devs already trained on HTML/CSS/JS, as Flutter is a lot simpler out of the gate, and much easier for traditional GUI paradigm people IMO.
You are welcome, and happy to hear it works for you!