
## 🎉 Welcome
:::success
Flexiform is the partner app for the FlexiForm data collection solution.
:::
[](https://codemagic.io/apps/64c87758f2cc9b966d63587e/64d07eeb005e1c0bc99bedf5/latest_build)
[](https://codecov.io/bb/awesomelabinc/flexiform_mobile_app)
## CODE DOCS
Code documentation is found under /docs, run dart doc in terminal first
## RUN THE PROJECT ON YOUR MACHINE
1. Install flutter [Click here for detailed instructions](https://docs.flutter.dev/get-started/install)
2. Clone this project
3. Run `flutter pub get` on your terminal
4. Run the application in the terminal using the command (make sure you have a device connected or emulator running)
DEVELOP
```
flutter run --flavor develop lib/main_dev.dart
```
STAGING
```
flutter run --flavor staging lib/main_staging.dart
```
PREPROD
```
flutter run --flavor preprod lib/main_pre.dart
```
PRODUCTION
```
flutter run --flavor production lib/main.dart
```
## CONTRIBUTING
:::success
In order for our app to be maintainable in the future we need to follow this guidelines.
:::
1. All critical functions should have a unit test
2. Widgets should have a widget test for all of its behaviors
3. As mush as possible please add an explanation for each code block, see "Code documentation guidlines"
4. Write an integration test for the QA Team
## DEVELOPMENT
:::success
Guidelines for creating a new feature
:::
1. Use the dev environment for developing new features
2. Once the feature is finish you can build and send an APK to the QA team to verify the behavior
## DESIGN PATTERN
:::success
We are currently following the repository design pattern for the data layer,
https://medium.com/@pererikbergman/repository-design-pattern-e28c0f3e4a30
and MVVM for the presentation layer.
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel
:::
The Diagram below is our current implementation

## CODE DOCUMENTATION GUIDELINES
:::success
We are using [dartdoc](https://pub.dev/packages/dartdoc) to generate the HTML files for us.
for more reference check [Efficient Dart Code]("https://dart.dev/effective-dart")
:::
Doc comments format
1. Provide a short summary for each class or functions
2. Describe the parameters if available
3. Describe the errors returned
e.g.
```
///Caches the tokens in the local storage
Future<void> cacheTokens({
///the Cognito access token it then get converted to ISO 8601 format and saved with the token
required String accessToken,
///the Lambda token
required String lambdaToken,
///The storage duration of the token before it expires
Duration expirationDuration = const Duration(hours: 23),
});
```
## BITBUCKET FLOW
<div style="width: 640px; height: 480px; margin: 10px; position: relative;"><iframe allowfullscreen frameborder="0" style="width:640px; height:480px" src="https://lucid.app/documents/embedded/f9fc74ef-e6ba-49f6-89bf-dfad6c9decb9" id="VyrfFWult9Jb"></iframe></div>
## DEPLOYMENT FLOW
<div style="width: 640px; height: 480px; margin: 10px; position: relative;"><iframe allowfullscreen frameborder="0" style="width:640px; height:480px" src="https://lucid.app/documents/embedded/575a2f7f-b400-44cd-8320-e2ca354c3025" id="hyrfvK0TvQGP"></iframe></div>