Cross Platform Mobile Development Options (in 2021)
09 May 2021A few years ago I wrote a post on my thoughts on cross-platform development mobile development options.
After a year of working on a large Flutter project, plus working on a much smaller React Native project recently, it seems like a good time to update my thoughts on cross-platform development options in 2021.
Flutter
I’ve just completed a year long project for a large client helping rewrite their mobile apps in Flutter.
Neither I or the other members of the team had done much/any Flutter development before, so it meant learning best practices together - sometimes through trial and error, finding out what worked for our particular app.
I really enjoyed using Flutter, and it’s definitely the nicest cross-platform development system I’ve used so far.
Good Points
- Uses a declarative UI (like SwiftUI) which is a productive, modern way of developing reliable and predictable user interfaces
- Hot reload - not needing to recomplie to see every change in the simulator - is very nice when doing UI work
- Visual Studio Code is a great and versatile development tool, with lots of handy extensions (I’d strongly recommend using it rather than Android Studio for doing Flutter development)
Less Good Points
- Support for packages can be a little patchy
- Flutter has support for most common requirements out of the box, or with Google written packages.
- However for more specialised needs, several 3rd party packages we used weren’t of great quality, and we had to fix some fairly basic bugs in them. They were mostly packages developed by a single developer, and the owner generally didn’t have the time or inclination to keep them up-to-date or fix every bug found.
- As ever with depending on 3rd party packages, use at your own risk
- Using Dart was fine, but felt a bit limited compared to using Swift
React Native
I picked up a small React Native project for a new client, who wanted a few updates made to an existing app another agency had developed for them.
I was looking forward to using React Native, as I’d only briefly looked at it before - and to be fair haven’t spent enough using it to make a definitive judgement - but to be honest I was quite disappointed.
The app was using Expo, which offers a slightly clunky hot reload experience.
I also didn’t really enjoy going back to using JavaScript for mobile development, after using more suitable strongly typed and compiled languages.
I’ll hold judgement until I’ve done more RN coding (and it may be that the inherited codebase wasn’t well designed in the first place), but my first commercial experience of it wasn’t anywhere near as nice as developing in Flutter.
Summary
I’d definitely recommend using Flutter for the right projects. Those projects that are mostly cross-platform rich UIs without any complex on-device requirements are a good fit, as you are less likely to hit any issues with pany 3rd party ackages you need.
I can see how React Native might be a good fit for a team that already uses React in a web app, but unless that is you - or your team has strong front-end JavaScript skills already - I can’t see much advantage in using it.
3 years ago I mentioned using Xamarin and Cordova/Ionic, and I definitely wouldn’t recommend starting any new project using them any more.
However, I’ve started a a new project back using Swift/SwiftUI/native iOS development - and am VERY happy doing just that! SwiftUI in particular is a joy to use, and I am much more productive using it - even compared to doing Flutter development with it’s useful hot reload.