On iOS, Flutter apps feel out of place. They don’t respond to common gestures, the Flutter team is always in catch-up mode with the latest iOS UI changes, and they don’t even support 120Hz refresh rate on the iPhone 13 Pro yet.
I have been investigating Flutter and other solutions for cross-platform desktop GUIs, where I am not interested in mobile or web apps. For me and for this use case, I think I've landed on not caring about native UI components for GUI. It just doesn't work in my opinion because you're either at the whim of the OS in regards to their constantly changing UI components and UI guidelines/styles, for Windows and macOS, or you're in Linux land where such things don't exist. There's quite a few big applications that are on both Windows and macOS that don't follow either OS' guidelines or use native components.
If you're going true cross-platform across Windows, macOS, and Linux, I think it's hopeless to try and maintain three separate apps that look and feel like a supposedly native app should look and feel like, if there's such a thing anymore. Windows and macOS are not even consistent for their own apps and OS GUIs.
- Flutter widgets can be made pixel perfect replicas of native UI components.
- Supporting older platforms is much easier with Flutter.
- You can use native UI components with Flutter if you want to, and mix them with Flutter widgets.
- Flutter has a tiny and fast runtime, React Native runs on Safari or Chrome. Flutter works great on embedded platforms too, such as IoT devices.
- Dart is similar to JavaScript, with the same runtime behavior, though obviously you can't use existing JavaScript libraries outside of the browser. You can use many WASM ones though.
>- Flutter widgets can be made pixel perfect replicas of native UI components.
How can I make flutter use native font rendering? I've played around with it a bit and fonts look completely off, don't respect my systems hinting settings, etc.
That is unrelated to my question. I'm using hinting and have everything sub-pixel-related disabled. If flutter does not support this, then flutter cannot look native.
Flutter uses Skia, Harfbuzz and FreeType under the hood. The last two is used by almost every other software for text shaping and rasterization.
You should open an issue if your font configuration is not applied, although on Android, iOS and macOS font hinting is not relevant, and I think on Linux fontconfig is used. I don't know about Windows.
Sure, it's easy to learn, but why bother when you can just use React Native? Also there are a ton of senior people with lots of years of experience to hire, where Flutter seniors basically don't exist.
With React being prevalent on the web front, why would anyone do a Flutter web app + mobile app?
Flutter release code compiles to AOT code which speeds up execution. React Native has the Javascript engine which can slow things down. For most of us here on HN, who are using flagship phones none of this really matters, however for other parts of the world that have less capable phones, the ability to run AOT compiled apps is a big deal. Flutter is a huge in Africa, mostly because it runs well on a lot of the popular phones there.
It brings its own widget implementation, with themes that approach, but do not perfectly match the native toolkit.
The downside is, that it doesn't implement the platform look&feel perfectly. If you want fully custom look and feel, it might be not a bad thing, but those who aim at native experience, they will never reliably get it.
---
On the other side of the debate, React Native, it is not all roses either. While it uses native widgets, it also runs JavaScript. And not just any JavaScript engine, or your preferred JS engine, but JSC. With JSC, RN team took their sweet time to support 64-bit Android properly, with issues rearing as late as 2020.
Before I started writing Flutter I had the same feeling. My first reaction to the Flutter design was "haha, it's not gonna work". But when I tried to make my first app I was shocked how good it was.
Since then I learned that most users do not give a s...t if it's pixel in pixel perfect copy of native components. Especially when Flutter team makes it literally pixel in pixel perfect to the native UI. I mean, it really doesn't matter in 99.99% cases in my experience (I have around 12 apps in Flutter atm).
So I see this Flutter design feature as huge upside, not a downside.
To add to the other replies here. It also puts the project in a precarious position since there is a huge amount of work involved in reimplementing UI controls from scratch and keeping them up to date with the platforms. If Google drops it or winds down their commitments, it would need backing with equally deep pockets to survive.
Have you actually tried it or it's just a guess? I had similar thoughts before I tried myself, and actual experience is completely opposite. People don't care if it "feels off" (especially when it's pixel-to-pixel perfect and you literally have no way to distinguish native components from "non native" – in the end it's just a bunch of pixels sent to the GPU).