
TL;DR
– Flutter is the most popular and growing cross-platform framework and has a solid community behind it, with a secure future
– Instead of converting to native elements, or using webviews for UI, Flutter has its own rendering engine, meaning true pixel-perfection for both platforms, resulting in better UI/UX, fewer bugs, and a faster time to production
– Flutter has a mature ecosystem of often opinionated libraries, thorough documentation and great tooling that helps developers build quality apps at pace
—–
In 2012 I built my first app. It was a personal safety app with a USP, a startup side project with my good friend Richie Jones. It was routine in those days to only launch on iPhone, and deal with Android later when you’d had some success, so I built it as a native iOS app using Xcode. This was before Swift was born so my only option was the most hideous language I’ve ever worked with – Objective C. I built a Rails/Postgres backend running on Heroku – it all felt very cutting edge.
We launched and had some success, with some free TV coverage on BBC Click and a modest uptake of users. When it came time to build for Android I decided to use PhoneGap (which was later to become Apache Cordova) which proved to be successful for the relatively simple UI our app needed, and eventually I replaced the native iOS version with PhoneGap.
My second PhoneGap implementation was not such a roaring success. A lettings app for a chain of estate agents, with one of the requirements being support of Windows Phone. The UI was more complex than my previous implementation, and PhoneGap’s reliance on HTML/CSS/JS webviews became apparent with visibly sluggish and unpredictable performance on Windows devices.
I did one more PhoneGap app – a caravan sales app for a major national holiday park brand. Fortunately, and rightly, they didn’t care about Windows Phone and the outcomes were generally good. But with PhoneGap you could always tell this was a webview, there was always a slight feeling of slowness, sluggishness or jankiness.
So I switched to Xamarin.
Xamarin was different to PhoneGap. It takes XAML and C# and converts it to native controls and elements. The UI libraries came in three flavours: Xamarin.iOS, Xamarin.Android and Xamarin.Forms. The latter allowed devs to build a single UI for both platforms, but at the time it was too immature to acheive anything nice looking with any kind of accuracy, and was only really useful for in-house functional apps where UI/UX wasn’t important. So we had to build 2 XAML UI’s for every app, but with shared logic/data layers. Not the cross-platform utopia I was looking for.
Xamarin.Forms got better at true cross-platform UI but eventually the Xamarin ecosystem suffered from neglect by Microsoft, usage dropped and ultimately it was replaced (some say abruptly) by an immature, incomplete and buggy Maui which has left many developers disenchanted with Microsoft and looking for something better. Building in Maui means a hard slog with unpredictable outcomes and seemingly forever fighting bugs or compromising in UI/UX.
And this is how I ended up with Google’s Flutter. It’s the most popular framework, it has a secure future, a deep and rich set of libraries, a strong community of developers behind it, great documentation, great tooling, cross-platform UI perfection thanks to its own rendering engine, and AI agents like Copilot seem to know exactly what I’m trying to do most times I ask. In short I can produce better quality apps faster than I ever could previously, and I’m welcoming this change with open arms.
