Hacker News new | ask | show | jobs
by rvanmil 2987 days ago
This looks really nice considering it's built with a cross platform framework. Did you also consider using React Native, and if so what made you decide to use Flutter instead? My team is looking to move away from Cordova for our cross platform mobile projects to either one of these so I'd be interested to hear about this. And thanks for open sourcing!
1 comments

I've been using Flutter for a year now, and I've loved it since the first time I gave it a try.

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.

I've been starting work with Flutter over the past couple weeks. The tooling and general experience so far has been pretty nice, though it doesn't always "just work". The fact that flutter is so coupled to Cocoapods is a disappointment and it means your build system is dependent on Cocoapods not screwing up - quite a tall order. I already ran into an issue that required me to generate a new project, copy my source over to get a working app again, then inspect the source trees to see what went wrong. It turned out to be a Cocoapod symlink issue or something to that effect. Not entirely a Flutter issue but something to be wary of.

Some good points of Flutter so far:

* Hot reloading is fast, much easier to iterate on designs and experiments

* Plugins seem to be easy to make, they made an architecture that focuses on minimal boilerplate

* Being able to use async-await syntax on a whole UI view is a cool idea (like Android's onActivityResult() with much less typing involved). Push a view onto the navigation stack, let it collect input from the user, pop off the stack with a data structure representing the user input)

* Animations are easy

* Minimal opening of Xcode. Most days I can get by without ever opening it.

* Data flow architectures like the Elm Architecture or Redux are well supported

Some not-so-good points:

* Having null

* Material design is pushed way too hard - Cupertino widget documentation/examples are lacking

* Code generation needed for JSON parsing

* State for StatefulWidgets are generic over the Widget and not the other way around - I would have expected a StatefulWidget to be generic over a State e.g. `MyHomePage extends StatefulWidget<MyHomePageState>`

* Because of the previous point, the UI building function, build(), is usually on the State class and not the Widget class

* My relatively barebones app is around 33MB on iOS

Overall though I like it! Lots of good ideas and tooling. I one day want to create something with a similar architecture using a language like Rust instead of Dart, and native UI components instead of reimplementing the entirety of Android and iOS component behavior.

I don't really agree about pushing hard on Material Design. Sure, the current widget situation might be skewed towards Material components and Cupertino is lacking. For Material widgets, they've implemented almost everything, even the most obscure ones. But I think they're pushing more for customized UIs. Meaning, UIs that don't look Material or Cupertino, but are more of a branded experience, think Spotify, Tinder, Snapchat, etc. Designs that don't really conform to Material or iOS design languages. The Hamilton app is a good example of this. Sadly, I'm not a UI designer so I went with Material Design on this inKino app since that's an easy route for me.

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.

>* Having null

I must have been spoiled by Flow, Typescript, Kotlin, and Rust, because this (having null implicitly be a member of every type rather than a separate type) has been the major factor in my decision to avoid playing with Dart yet. It's so nice to not have to often manually re-check functions I'm editing to see whether or not each of the parameters are supposed to handle null, and to not have to document that in comments (the same way you usually end up documenting types in a dynamically typed language; this is what I'm using a typed language to get away from!).

I've been using React Native too and my experience is: I accomplish a lof of stuff in a few days, then lose a whole day trying to hack a custom Picker element or similar. Grrr.
And what's your experience vs xamarin ?
Disclaimer: It's been over a year and Xamarin could've improved a lot during that time.

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.

Okay, trying xamarin soon. I'd like to add for fellow readers that Xamarin has 2 implementation for cross platform development:

- Xamarin Forms

- Xamarin Native

Where forms has the most shared code features ( Dev efficiency). Fyi, the op is talking about Xamarin Native

Just FYI, Expo which is bundled with create-react-native-app would solve the problems with linear.

- https://docs.expo.io/versions/latest/sdk/linear-gradient