119 karma · joined September 8, 2017
Well, I did work on a Flutter app with a tiny team between 2018-2021 and we had 15M installs, were app of the day, got featured multiple times in the App Store, got Google’s design award, were a preloaded app on iPhones in Apple Stores in several countries, and were overall doing quite well.
It was a very focused app though, so the size of our codebase didn’t really grow with the number of installs.
Regardless, congrats on the launch.
> the macOS app and Chrome extension communicate via WebSockets on localhost; nothing leaves your machine.
So the macOS app sets up a local webserver on some port that the Chrome extensions knows about in advance? Smart, kinda like how I had to do an auth flow for one of my CLI apps.
I'm really glad you liked it! To be honest, I felt a little self-conscious about some parts of it, but generally, I'm quite happy with it.
It also helps that Dart is a familiar language without too much magic!
For just Android, you don't need a Mac at all.
I'm hoping someone with more experience could chime in.
With your other points, I generally agree. Didn't mean to imply that it "just works" 100% of the time. But compared to other cross-platform dev tools / SDKs I've used, I feel like Flutter does such a great job in the tooling department.
Flutter and Dart come with a nice HTTP library out of the box. In my experience, it does everything you'd expect from a networking library. If you're looking for something like Retrofit on Android, there's a package called "jaguar_http" that does the job.
For taking/picking images, you'd use the officially supported "image_picker" plugin. It exposes a nice API based on Dart's Futures and handles Android's onActivityResult dance for you in the background. If you're looking into embedding a camera preview in a Flutter app, there's a package called "camera" for that.
There's generally a plugin that handles the platform stuff you need to do. If not, you can always create one and use Java/Kotlin/Swift/ObjC code to call the native SDK APIs you need yourself. Having published a couple plugins myself, I've found the plugin system to be really nice.
That being said, Flutter does have unofficial Linux and MacOS desktop embedders: https://github.com/google/flutter-desktop-embedding
I haven't had the time to look into it, but having seen a couple example Flutter desktop apps, it seems really promising!
Coming from a Java/Kotlin background, I found C# to be really nice, but I had some issues with Xamarin tooling. I used Xamarin Studio and for the most part, it worked fine. Sometimes, there were some random crashes and project build errors that mysteriously resolved themselves. I also needed pie charts per the customer requirements and the best pie charting library I could find had licensing issues, so ended up implementing the pie chart myself which wasn't that bad.
To compare, I would say the Flutter tooling is really good, compared to Xamarin where sometimes I would not be confident with the tools. Also, with Flutter, I can share the UI layer entirely, compared to the Xamarin project where we only shared some plain business logic with written purely with C# without Android/iOS SDK dependencies. I know about Xamarin.Forms, but have no experience to compare it with Flutter. At the time the project team didn't want to use Forms, but I don't remember why.
In my work, I've been using other cross-platform technologies, such as Xamarin and React Native briefly (actually currently doing a customer project with RN). In my experience, RN is not that bad and mostly gets the job done, but I've grown to like Flutter more. The tooling and documentation are top-notch ("it just works"), and since it custom renders everything, the UIs are consistent across devices and platforms. For example, with React Native I had to recently fight with a third-party library to have gradients (RN doesn't support them), but couldn't get the library working.
Another thing that I heard from colleagues was that React Native can introduce a lot of breaking changes between versions. I have a one-year-old hobby Flutter project and I was still able to run that without any pain when the first beta came out.
Being a native Android & Java guy for the last 5 years or so, having the strong type system of Dart also felt more natural to me than Javascript.
Sorry about that!
The monthly commercial license fee is a bit of a downer though. I feel that a lot of software development agencies (my workplace included) are just not gonna bother with it and just use something free instead.
I agree about the C++ point with you. I have to confess I'm also one of those people who generally want to do things on a higher level. Would definitely give Qt a try if it was free for commercial purposes though.
The WebView-based solutions weren't fast enough and sometimes behaved differently across devices because of different WebView versions. With React Native, the impression was far better because the performance actually can be quite good. But it's still hard to abstract the UI layer away when even the native Views on Android behave differently across devices and Android versions. I had to use almost a half of a day for fixing invisible drop-down menu items on some specific Samsung device on Android 4.1.2. Not to mention when you have to abstract the UI for both Android & iOS, which brings its own set of problems. It's one of the reasons why such a fundamental thing as navigation has been so hard to get right.
I feel Flutter is the first cross-platform SDK that gets something fundamentally right. Since every pixel on the UI is rendered by the framework, we as developers have better control of everything. It's going to have much better performance because there are no bridges between native and cross-platform land. Additionally, Samsung can't fuck up our UIs: once the UI works, it works the same on every device.
As a bonus, they also keep tremendous care of their codebase and they have the best documentation I've ever seen. My really simple, quick 4-line fix didn't go through until I wrote 30 lines of automated tests to go with it. After all, Flutter is going to be the native SDK for developing apps for Fuchsia, and I think Google has learned not to repeat the same mistakes that happened with Android again.