Here, I will try to present another huge benefit of using Flutter desktop: the ability to build an app with a user interface that matches the underlying platform’s design standards.
As you can see, Shortcut Keeper is built to be an adaptive app for desktops, boasting a different UI design for macOS and Windows, while using a single codebase.
This has always been the holy grail of cross-platform development, and the screenshots here are relatively convincing.
Building portability in from the start whether it’s dealing with the quirks of each compiler or OS through all your abstractions to the GUI layer can solve a lot of problems. It’s a lot of up front work but you only need to do it once.
If you have a global view of portability and cross platform abstractions and VM’s and design your framework for reuse you can do a lot of powerful things with this from creating your own desktop to real world accurate interactivity in games to cranking out editing tools. Effectively the only difference between a desktop and a game and an application is the content file.
There are advantages to building your own from the ground up but if you don’t want to go to that effort hacking something together like this developer did can be a lot quicker and easier. But as they prove cross platform development while providing native interfaces is possible. If you want to create a cross platform development framework and tools which seamlessly integrates platform targets you need to put the work in for this to happen. That’s something you need to think through carefully before you begin so you have a properly unified and abstracted codebase rather than a few random bits hacked together. Other than this I think this developers effort is worth praise as it both proves the concept and gets people thinking about how to properly manage cross platform development and shows that fundamentally it’s not that hard. The next level is obviously a job in itself but if the idea is taken further than the underlying concepts for developing glossy cross-platform native apps might get more attention.
HollyB,
Obviously those things are good to do. A lot of developers have been doing this over the years and there are now many competing frameworks. Most provide OS abstractions and many of them are portable out of the box. Sometimes there are good reasons to roll your own, but many developers can get to the finish line a lot faster by using an existing framework that checks the boxes already.
This is the huge difference with software development today compared to a few decades ago. In years past when companies needed software they’d hire software developers to write it for them, now by and large they’re more interested in developers who are already proficient in a specific framework or platform and not those who can build things from scratch. I am one of those people BTW who likes to solve things with my own framework, just like you do, but less and less of the computing world works this way. Honestly I quite enjoy low level algorithms and have high proficiency with them. But these are skills that have largely gone unused in my day jobs. If not for my personal projects, a lot of my low level skills go wasted in the business world with rare exceptions. I don’t know when you retired, maybe you saw this happening as well?
Retired is a strong word but the last time I did any design work or coding was fairly soon after VC2005 came out so a long time. I don’t know if I’d want to do it again but if I did someone else could do the work this time.
I did see the development team bloat coming especially with games. When I read tech concept articles like this which pop up every few years they get my attention. They partly remind me of my own work but also show other people still have a go at it. And why not? It’s not just about creating a thing it’s self expression and giving their mind a stretch. Corporatism and social media did catch me by surprise. Everything got so big and the world got so small. Maybe it’s a question of finding new things to be interested in and in different ways like a process of rediscovery and appreciating things and enjoyment.
I’m quite pleased I finished some DIY projects and repaired my sofa springs. That was the highlight of last week.
If something is fun you never know where it might lead which is I think the big take from this one.
Does it use the OS’s native theming engine or is yet another fake?
I can’t believe Qt got this right more than 20 years ago, and we are still here building the computer equivalent of a fiberglass imitation that kind-of matches the native theming of the OS. I just hope this isn’t another such case.
I wouldn’t say Qt got it completely right. The problem is always portability. Nobody gets this right. You cannot take arbitrary sourcecode and have it work on every compiler on every OS and OS version or even 32 versus 64 bit because there is no industry standard portability layer (for C/C++ at any rate). I linked to a book by Abrash which is available in PDF for free and you can find his “portability.h” file somewhere if you go looking for it. I referenced this and added to it at the time. It’s not a job I would want to do twice if I could even get hold of the compilers and SDK’s and platforms to test against!
Yes you use the native theming where you can and where it is preferable. But you also have to be able to work on platforms which don’t come with fully featured interfaces such as embedded hardware and consoles. “Faking it” is trivial as you just cache the output for your own drawing mechanisms. Then there is the issue of targeting different drawing surfaces whether it’s a bitmap buffer or OpenGL or D3D or whatever.
Design tools are another level of fun. You can code up your interface manually or use design tools. Almost all mainstream GUI interfaces support the same elements. There are very few meaningful differences so it’s not hugely hard to produce cross platform tools to make the designers job easy.
There is nothing new here. What is new is pulling on all these design challenges and producing a coherent whole cable of compiling on any platform and targeting any platform.
I was doing this 15-20 years ago and it’s only now people are beginning to see what I’m talking about. Neither QT nor SDL nor any other framework I can think of solved the whole problem and they still don’t. Can you compile to an arbitrary version of your favourite OS? Will it drop in to a Playstation 5?
What’s the business case? As for as the project went it was good but it was part of a bigger project which failed to complete so never shipped. The rest of the project included a simple VM for running scripts or JIT or fully compiling as a standalone executable. It was nothing huge and didn’t include fully spec’d languages or optimising but was good enough for a game engine or business application so usable for games or editing tools, and you could even write a simple browser with it if you wanted to. If you have a sneaky look at the design tool Maya you’ll find that aside from the scenegraph and GUI elements 99% of the application is scripts.
The original article covers a quick and dirty hack but it’s a least effort proof of concept and good as far as it goes. Another project some years ago caused a stir by plonking a GUI on top of an arbitrary surface in arbitrary space. JIT in browsers became a thing too. So you can see all the elements are there but you’ll notice they took 10 years plus to become a thing.
In order for the changes to be positive and have the right impact on the business, it is important to support the collaboration of the entire organization with flexible systems like https://alpacked.io/ that facilitate this teamwork.