Working eight tickets in thirty minutes, while yapping away about Flutter/MX, a sophisticated state manager wrapping Flutter, thanks to a Clojure implementation that compiles to Dart: https://youtu.be/18AbXfQdq68 . The product? The flutter_tts (text-to-speech) demo rethunk.
I definitely identify with addressed concerns over the hassles of my go-to debug approach, viz. print statements. I have a rather intense state engine that, when things go awry, can be brutal to debug with prints. But now I am doing ClojureDart, which I know is on the FS roadmap. The state engine is stable these days, but if it misfires before you get to CLJD, forgive me if I swipe your idea and roll my own ad hoc, informally-specified, bug-ridden, slow implementation of half of FlowStorm. Maybe a tenth.
(a) Is six months a long time?
(b) And then they delivered successfully.
(c) Not seeing a problem.
I know, I have been beating on CLJD like I was its Daddy wrapping it in a reactive framework, despite their warning that there would be surprises. I had one problem that turned out to be a simple bug in CLJD.
I also follow their channel on the #clojurians Slack and see they are doing a profoundly deep job on the compiler. This means a robust product, not one that has developers forever looking over their shoulders at the language they are using.
Six months for that is nothing. Now send them eight dollars. jk. :)
cough Well, this article _is_ about a delightful Lispy alternative to Dart that compiles to Dart, yielding a superior language with Genuine Dart Inside(tm) and elegant support of Flutter.
Dart may end up living on inside ClojureDart, much like DOS living on deep inside Windows and PCs.
As a Dart/Flutter outsider myself, I am finding all this "Dart no, Flutter yes" traffic intriguing. I am also a lisper, so no need to sell me on the difficulties of Dart, even if it were the perfect static typed OO, but it sounds like we have a great UI stuck inside an unloved language.
Happy opportunity for ClojureDart!
btw, in case anyone is wondering, I am not a part of Team CLJD at all. My hack is my own separate effort.
I agree "UI = f(state)" rocks. That was the one thing React got right. But they never worked out state management, other than to kick off the Flux monstrosity that Redux ran with, and every other UI I can find.
As for what I call the "Lego model" of UI construction, while definitely off-putting, I think the "why" is prolly "simplicity thru decomposition". So we do a bit more typing but have a dead simple approach to building our UIs.
The nice thing about any Lisp with its macro capabilities is that we can wrap sth like Flutter to produce a library that remains Flutter, but hides the noise.
ClojureDart offers a so-called "widget" macro, and my Matrix library goes a different way, making every constructor such as "scaffold" into a friendlier macro.
By popular request, a video[0] of my workflow using ClojureDart and Matrix to live code Flutter. The last few minutes show me probing a new bug! I experiment, and find a partial workaround that hints at a solution.