# DIFF EDUCATION Language Literacy App
This offline-first mobile app teaches Portuguese to non-literate mothers in rural Mozambique through visual and auditory learning, accommodating users with no reading or technology experience.
### Lib File Hierarchy
This offline-first Flutter application uses Hive to store its data locally, and Firestore to sync updates.
`lib/model/`: The blueprints for Hive objects (ie. category, vocab, q&a, quiz, conversation)
- To generate the *.g.dart files, run ```dart run build_runner build --delete-conflicting-outputs``` in terminal in root directory (if fields not updating in generated files, mark each field as required in constructor)
`lib/repositories/`: The functions that update/retrieve the Hive data directly
`lib/scripts/`: The scripts used to easily perform tasks at once (Check **Scripts** section for instructions)
- `convertToBase64inJSON.js`: Converts the media files to base64 strings and adds them to the JSON files
- `JSON2Firestore.js`: Uploads the JSON files to Firestore
- `mozambique-fy.js`: Converts the spreadsheet to JSON files
- `uploadAssetsToStorage.js`: Uploads the media files to Firebase Storage
- `vocab2audio.js`: Converts the vocab words to audio files using tts2mp3.com API
`lib/services/`: The functions that retrieve from the Firestore data and sync with the Hive data
`lib/view/`: The UI of the app
`lib/view_model`: The bridge between model & view: functions that use the repositories to update the views
### Firebase Firestore & Firebase Storage:
There are 2 important steps that are needed to allow the app to fetch from Firestore and Storage as you debug:
- Place the Firebase Admin SDK private key (`mozambique-app-firebase-adminsdk-fbsvc-434948f8b5.json`) in the root of the folder
- Place the Google Services SDK (`google-services.json`) in `android/app`
## Mobile App Deployment
### Building APK (Production)
1. In terminal, navigate to the root of the folder
2. Run `flutter build apk --release --dart-defin …