The last month has been an incredibly productive time for me but not in my traditional areas of contribution. While I’ve done some open source contribution on other projects it has been more intensive work on a new open source project that really took up a lot of my time. I’ll be blogging a lot more on that application and releasing betas of it after next week. The big news in the short term on that front that I wanted to share was that the application development took me from an on-again-off-again dabbler with Flutter and Dart to it becoming my primary language. It has become my primary language so much that when it was time to automate some image transformation code I skipped my usual go to language, Kotlin, for Dart. It also is the first time I’m feeling this confident about a platform choice for cross platform application development.
Why bother with cross platform development? Why not just choose to code in Swift on Mac or WPF on Windows? Well, I’m a Linux user primarily. I spend most of my waking time on Linux platforms so I need to pick a development stack that lets me do that first. But writing just for Linux seems like a waste too. I do spend some time secondarily on Mac so it’s advantageous for my own uses to at least target that as well. However that is niche as well so something that also compiles on Windows helps. That’s why I converged quickly on Avalonia years ago. The only real alternative beyond that back then was Qt, which is C++ not managed code based, or JavaFX or Swing on the JVM. The latter just felt old and unsupported, even though still under development. Unmanaged code is something I’d rather not go back to if I could avoid it. So Avalonia on .NET Core seemed pretty darn perfect. I tried to do a Mobile .NET experience using Xamarin and Uno but it just always felt a bit Rube-Goldberg like. Server side I felt .NET a bit stifling too. Then Kotlin Mobile and Kotlin Multiplatform came to a more mature state and it brought me back home to the JVM-based stacks. I did manage to make some good progress. I even turned out a couple of command-line apps that I liked. However the build process, especially with desktop app development was even more Rube-Goldberg like and it didn’t feel like it was getting better in the near future. It’s possible that with Compose they may get to a point where mobile and desktop are seamless to develop/deploy with but they aren’t there right now. Even mobile is too painful right now.
It was with that backdrop that I started dabbling with Flutter a while ago. I have my reservations since it is managed like a lot of Google open source projects. It’s more Android based but with bleeding edge development happening in the open rather than community based. It did seem very slick though in terms of tooling and, more importantly, on packaging and delivery. Over the summer I spliced more of my time into practicing with these frameworks and really getting to know it. I started with some tutorials on the standard Flutter website. I then moved into a series of YouTube videos to further flesh things out. While I was making progress on language and architecture fundamentals it was the presentation-layer end state that was really throwing me for a loop. How do I make a decent looking UI that would have real performance? There are many ways you could do something but what was “the right way” or at least one of the right ways of doing it. As luck would have it I got a trial subscription notice to Packt and found a course on there called “Flutter Web - Build a Diary Web App with Flutter and Cloud Firestore”. While I only quickly watched the first few videos it did start giving me a bit of direction to really break through some of my barriers. But it was the Ray Wenderlich “Flutter Apprentice” series that really got me past all of my other barriers. Yes the beginning was a bit of retread but it very much helped me gel a bunch of concepts in my head.
With that I started on the app idea that had been rattling around my head for awhile and that I had attempted to do once before in Avalonia. I did make some progress with it to a point. I even put out an open source GUI tool around a .NET document database called LiteDB that I documented here. But ultimately I got sidetracked on other projects and never finished my primary application goal. With these new Flutter/Dart abilities in hand and a new burning desire to build this application I decided that this would be my first “real” Flutter app. While I’m sure it isn’t the sexiest looking app, aesthetics never being my strong suite, and probably has some Flutter/Dart newbie mistakes I am pretty pleased with the current state of the app. It is actually useful for me and ready for being put in the hands of others to start beta testing. That alone is a milestone I’d be happy with. However I’m now primed to do even more with the application as well as Flutter/Dart in general.
Along this development journey though I learned a lot about Flutter and Dart in general and also some desktop specific aspects. While Flutter is mostly thought of for mobile app development my main target is actually desktop. There is a wealth of information and libraries for Flutter generally but the desktop still needs a bit more TLC. It is technically still in beta even. That’s why their website has CYA language about not shipping desktop products with it yet even though some already have. Just like with when I was learning Avalonia and documented my early steps here I amassed a huge collection of post ideas of things I need to/want to capture about my early Dart and Flutter experiences. I like doing this not only as a service to other newbies that may need additional help in bootstrapping, but to make it easy to find my way around again if I ever have a long break from the platform.
With creative juices flowing I am very much looking forward to a lot of output being published after next week. I hope to get betas of my new app out as well as a write up of it here. I also hope to formalize the notes I have on the various newbie topics into legit posts on Dart and Flutter that I hope to publish here too. With a total of sixteen of those though I’m not sure if I’ll run out of steam before I get there. At most I hope to at least have skeletons with important points in draft mode so that I can flesh them out in the coming weeks and months.