9 ms·
I’ve been using flutter in anger for a cross platform web / iOS / android music app. I love it! I see lots of Dart skeptics here. I was too when I started but
by nzoschke 5y ago
I’ve been using flutter in anger for a cross platform web / iOS / android music app. I love it!
I see lots of Dart skeptics here. I was too when I started but Dart is great and better than JS.
I’m a Go developer by profession and Dart feels similar in ways. Simple language, simple type system, easy to learn, only one way to do things. Great compiler, great debugger, good ecosystem, good performance.
The complaints about widgets feeling off on different platforms is fair. My app is a totally custom UI so it doesn’t matter.
My favorite feature is the widget testing framework. It’s really easy to run the actual app and interact with it and verify UI interactions, UI state, app state and even UI pixels.
My frustrations are:
- cross platform system packages are of various quality and feature support. Someone in the ecosystem has to build the libraries with native bird and message passing to the flutter interface. I’m constantly surprised how much exists but when there are bugs or features missing on one platform it’s some major work to get it addressed.
- app initialization, lifecycle and navigation and routing took a long time to get right. Some more conventions on overall project structure and better getting started templates would go a long way.
The monolithic language and framework will be an advantage to some and a turn off to others. As a solo hobbyist, it’s a super power to get all these platforms at once.
- nkozyra 5y ago> I’m a Go developer by profession and Dart feels similar in ways. Simple language, simple type system, easy to learn, only one way to do things. Great compiler, great debugger, good ecosystem, good performance. Hm that's interesting to me. As a Go dev I just felt like "welp, I'm in Java." I don't dislike it, but it doesn't feel nearly as light.
- tjpnz 5y ago>- cross platform system packages are of various quality and feature support. I've been working on a video call app for fun and have certainly noticed this. On the surface it appears possible to write such apps with Flutter. The reality though is that the implementation depends on half a dozen or so third party plugins with varying degrees of quality (and a small enough ecosystem to afford very little choice). Not to mention the inconsistencies with how they work across Android and iOS, although there's little which can be done there. At this point mostly everything's just adapters and other integration glue. If it ever goes beyond a hobby project I'll probably write native versions for each platform.
- throwaway5486nv 5y agoIn anger with what? React ? ReactNative?
- deleted 5y ago[deleted]
- pmahoney 5y agoUsed "in anger" means "professionally" or "for real" or "where working or not really matters" vs. using it for hobby projects or experimentation.
- aaaaaaaaata 5y agoMakes little sense, even less with the following sentence. Hopefully it doesn't catch on.
- deleted 5y ago[deleted]
- robinsonrc 5y agoIt’s hardly a new expression
- sjburt 5y ago"In anger" is an idiomatic usage, meaning something like use for a non-trivial purpose. I think it comes from the military, roughly synonymous with "in combat".
- deleted 5y ago[deleted]
- ramses0 5y agoI first saw it: https://ant.apache.org/ant_in_anger.html https://ant.apache.org/ant_in_anger.html "Ant in Anger" I've taken it to mean: You don't know it, you might not particularly want to be using it, but you have a specific requirement and a deadline. eg: "Plumbing in Anger" I would expect to distill enough to fix a sink or install a toilet or something, and tend towards a bundle of task-focused items/outcomes, and less on the "Gestalt of Plumbing".
- melony 5y agoI also have complaints about the package manager. A language as new as Flutter shouldn't have significant dependency conflict hell as it is a solved problem. Npm/yarn, cargo, Go are all able to (in most cases) handle conflicting upstream dependencies. In other words, if package A required version 2 of C, and B requires version 1, the code can still compile without any user intervention (such as shading) barring some corner cases. This is the biggest difference between the new generation of package managers and the old pip/gem/maven type. For some reason, Dart's authors decided to use the traditional Java style package management algorithm (which in the worst case, on paper at least, requires NP time constraint solving but this is rarely an issue in practice). I have wasted days trying to get an obscure third party dependency n levels up the chain to build so the codebase can successfully compile. I strongly suggest aspiring dependency manager authors read these https://research.swtch.com/version-sat https://research.swtch.com/version-sat https://pnpm.io/faq https://pnpm.io/faq before building yet another broken package management solution. This is a huge problem in the Lisp community too but their problems are worse. Racket doesn't have lockfiles. Same problem with quicklisp. The alternative replacements like Racksnaps don't support conflicting versions either. As far as I know, CLPM is the only modern dependency manager in the Lisp world though it is very poorly documented, barely maintained, and installing it is difficult. If you go to the racket mailing list, nobody seems to be interested in tackling the problem or even acknowledging that it exists.
- brabel 5y agoHm... I am kind of collecting all information I can about package managers for a few months now... pub is one of the best I've seen. Cargo/Go/npm, as you say, will try to "shade" conflicting versions, which is basically a gamble. It may or may not work at runtime because data exchanged between different nodes in the tree of dependencies may have conflicts that make them incompatible... so having module A depend on version 1 of X, while module B depends on version 2 of X, and then A and B exchange objects that depend on which version of X they use will cause issues... this will blow up at compile time in Rust, at least, if you expose X in the API of A and B... but even if you don't, it's still possible for a conflict to occur if the exchanged information is in the form of serialized data or generic collections. Pub selects one version of each library. It has great tools like listing the currently latest versions of every dependency, or the currently updatable ones given your version constraints, it addresses Dart SDK bounds of each package and it just works greeat. Can you give an example of when it didn't work for you? EDIT : in the Lisp world, the biggest package manager is Quicklisp[1] as far as I know... and it works decently! I think Ultralisp[2] might be somehow better because it updates indexes faster or something. [1] https://www.quicklisp.org/beta/ https://www.quicklisp.org/beta/ [2] https://ultralisp.org/ https://ultralisp.org/
- password4321 5y agoIf you want cross-platform Go, check out https://github.com/fyne-io/fyne#widget-demo https://github.com/fyne-io/fyne#widget-demo