-
Notifications
You must be signed in to change notification settings - Fork 21
1. Summary
Rokwire client is a mobile application for Android and iOS. It is developed on the Flutter platform. Most of the code is written on Dart, however there are modules written as native Android / iOS components on Java and Objective C.
Rokwire client application exposes a number of functional features that are not related to each other in the common case. It follows a model similar to the Document / View model called Data / UI model in terms of Rokwire client application.
Data maintenance is separated in a standalone layer. It provides access to the data used to build the UI as well as different services provided to the UI layer.
Data layer is independent of the UI layer and it does not have straight access to it. When an asynchronous event appears the Data layer needs to inform the UI layer for this it fires a notification that is handled and processed in the UI layer.
Data layer itself consists of two main components:
The model component is a set of classes that generally maps the backend data, represented as JSON. In the common case a model class has a number of data fields and methods for JSON serialization.
The services component is the core of the Data layer. They provide different services to the UI layer.
Some of them access the Rokwire backend services, often caching data and keeping it up to date. The communication to the backend services is performed by model classes serialized in JSON format.
Other services run locally and provide methods for maintaining internal application state like lifecycle state, connectivity state or navigation stack state.
The UI layer uses the Data layer to build the UI. The UI model follows a Tab Controller application with a shared navigation stack.
A navigation stack entry is called panel in the terms of Rokwire client application. The panel typically consists of a navigation heater bar at top and tab bar at the bottom.
The panels are grouped by their functional categories: home, wallet, explore, athletics, laundry, parking, Illini Cash, wellness, campus guide, notifications (inbox), polls, groups, GIES, canvas, settings, debug and onboarding.
Each functional category can have a set of control widget reused across the different panels from the functional category. There is a set of separate control widgets that are reused across the different functional categories.
Rokwire mobile client application started its development as a standalone and single module application. Later, some of the application functionality had to be exposed for reusing by third party client applications. That's why the initial application content was divided into 2 modules. The reusable functionality was extracted to a stand alone library called Rokwire plugin. The Rokwire client application embeds this library and also implements own non-reusable features.
Rokwire Plugin is a library designed as a Flutter plugin.
It mostly consists of a data layer that can be reused by third party applications. There is a designated way to extend a plugin service in the hosting application. The hosting application has the ability to decide which of the available services to run and which will not be used.
The plugin also contains a small UI layer that consists of a widgets library with some commonly used UI controls in Illinois app that could be reused by different applications too.
Internally, the plugin contains a set of utility classes that are used by the other modules in the plugin and are also exposed for reusing in the hosting application..
This is a Flutter application. It embeds the plugin library and reuses all existing functionality inside.
It extends the plugin data layer by adding its own functional modules that do not persist in the plugin, like canvas, gies, campus guide, etc.
The application implements the entire UI taking use of the common widgets library from the plugin.