Skip to main content

Frontend

Framework Selection

The frontend of the application is written in the Flutter mobile framework. The reasoning for using Flutter is:

  • Rapid Prototyping: although the UI / UX is not a core goal of the project, it is always beneficial to have the application be easy to use and self-documenting.
  • Simple, understandable code: Due to being an abstraction over platform specific code, the syntax is general enough to be understandable from all backgrounds and contexts. This is important for long term maintenance and upgrades of the project.
  • Rigid design patterns: Flutter enforces and encourages the developer to utilize highly maintainable and testable code patterns, allowing for easy extendability. This also allows us to co-work on the same project easily. The same patterns replicated across the app allows different team members to aid development in different sections of the app.
  • Easy Testability: The framework has built-in testing patterns, and tests come configured out the box for easy developing. 
  • ML integration: tensorflow lite is supported first-class in flutter, allowing us to use the models on device. The training will be done remotely, and the model will be versioned and sent to the user.

Goals

The goals for the frontend portion of the project are as follows:

  • High levels of testing coverage: ~90% test coverage strictly required in all components of the app.
  • Responsive UI: The user interface must be useable on all mobile devices in the vertical orientation. 
  • offline capabilities: all reporting must be stored and retried when the user has internet connection.
  • The ML must be ran on device. 
  • Currently, only the English language will be supported, but design choices will be made with multi-language support in mind.

Architecture

The app will use the commonly used BLoC architecture. This allows for high testability, maintainability, and collaboration. 
The app structure will be standard and enforced; features will be separated by page, and from each other to afford low interdependence of modules. 

Demo

A demo of the application will be provided here at a later date.