My capstone project is "Development of an Evacuation Drill App", and a technology we need is a mobile framework. Our choice of framework was mostly made for us, as two of our three members learned Flutter in CS 492 over the summer.
Flutter is a mobile framework developed by Google using the Dart language (which was developed previously by Google, initially to compile to JavaScript). It is an alternative to React Native, which is a mobile framework developed by Facebook using the JavaScript language.
Flutter attempts to deliver on the promise of "code once, deploy everywhere". From a single code base Flutter can compile apps for both iOS and Android, along with Windows, macOS, and the web.
However, like many of its predecesors it only accomplishes this to a high degree – not completely. For some specific features native code must be implemented after compilation. But for the general architecture of a mobile (and now desktop or web) application, Flutter can be the primary framework.
Flutter was a clear choice for our project based on group familiarity.
It was a much better choice than developing our application twice, once for iOS and again for Android, and better fulfilled the project requirements by not choosing to develop for only one ecosystem.
An additional reason it is a good choice for our project is that none of our group members have extensive front-end web development experience. On teams that do have such experience, React Native can be a stronger choice because it uses the JavaScript language and follows many of the design patterns used by front-end web devs.
Flutter also makes claims to being faster on both mobile operating systems. These claims are mostly true, but the end-user experience does not seem to be reasonably diminished when using React Native, so in my opinion it is not a strong reason to choose Flutter over React Native. I agree more with the sentiment that if performance is primary concern for a project, true native code should be the focus of development.
A peripheral concern which Flutter resolves is a stretch goal for our project – to develop a desktop application to aggregate data from multiple instances of our mobile application. Flutter is now equiped to compile to desktop applications for both Windows and macOS. While it would not be a great choice if this was the main focus of a project, being able to reuse our code-base with minor tweaks to create a new desktop application brings this stretch goal closer to realization.
Flutter will be the framework we implement to develop our mobile application for both iOS and
Android. We will use a basic flutter project as our starting point for development by running
flutter create
.
We will leverage many of the open source packages available for Flutter and it's underlying language
Dart by using the pub
command.
Finally, when it comes time to test or publish our application we will compile it for iOS and Android using flutter.