Skip to content

Careot is a mobile diet tracking application based on Flutter and Firebase

License

Notifications You must be signed in to change notification settings

les-crepes/CAREOT_APP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub GitHub Super-Linter GitHub Release Date GitHub release (latest by date) GitHub repo size GitHub issues GitHub all releases


Careot logo

đŸ„• Careot

Careot est une application mobile de suivi diététique basée sur Flutter et Firebase.

Jetez un oeil à notre site pour une présentation de l'application ou à notre video https://youtu.be/09aPwHoQaI8

Our Tech Stack

📕 Sommaire

💬 Contexte

Nous sommes une équipe motivées de 4 étudiants en derniÚre année de Bachelor. Nous sommes répartis en deux équipes:

  • Team Frontend: ChloĂ© & Luca
  • Team Backend: Nelson & Olivier

Ce projet s'inscrit dans le cadre de la HES d'été à la HEIG-VD d'Yverdon en 2022, durant laquelle nous devons développer une application pendant une durée de 3 semaines.

Nous sommes en orientation logiciel sauf Olivier qui a optĂ© pour la science des donnĂ©es. Mais nous avons tous une chose en commun, nous aimons les crĂȘpes.

La nourriture occupe une place importante dans notre processus de dĂ©veloppement. L'idĂ©e de cette application a vu le jour Ă  une crĂȘpe party L'aventure a ensuite commencĂ© autour d'une Babka. Il sera nĂ©cessaire de terminer avec une soirĂ©e crĂȘpe!

🐣 TĂ©lĂ©charger l'application

Vous trouverez la version Android de l'application dans la section release de Github.

Il est possible que dans le futur une version IOS soit disponible donc tenez vous au courant.

Guide d'installation Android

  1. Téléchargez le dernier APK sur votre téléphone.
  2. Autorisez votre explorateur de fichier ou autre application Ă  installer des .apk depuis une source externe.
  3. Puis lancez l'installation. 😉

🔹 Build

Si vous souhaitez build l'application vous-mĂȘmes, veuillez suivre les Ă©tapes ci-dessous:

  1. Installez Flutter
  2. Clonez notre repository
  3. cd CAREOT_APP/
  4. flutter pub get Installer les dépendances
  5. flutter packages pub run build_runner build --delete-conflicting-outputs Nous utilisons le package Auto_route qui génÚre automatiquement des fichiers. Si vous souhaitez ne pas executer cette commande à chaque modification du code source, vous pouvez alors utiliser cette commande à la place flutter packages pub run build_runner watch
  6. flutter build apk --release Build un apk en monde release

đŸ€ Contribution

Si vous voulez contribuer Ă  notre projet, il faudra effectuer un fork de notre repository et suivre les Ă©tapes ci-dessous:

đŸ€žâ€â™‚ïž MĂ©thode de travail

  1. SĂ©lectionner le projet Github, prendre ou ajouter une tĂąche dans l'onglet TODO.
  2. Créer un issue dans le repository correspondant
  3. S'assigner à l'issue et ajouter les tags nécessaires (frontend, backend, bug, ehancement etc...)
  4. Créer une branche associée à l'issue (petit bouton dans issue: create branch)
  5. Charger la branche en local (copier la commande fournie par l'utilitaire)
  6. RĂ©aliser les modifications
  7. Lancer les tests en local -> flutter test
  8. Lancer le linter -> flutter analyze
  9. AprĂšs validation, push sur la nouvelle branche dans la remote origin.
  10. Créer une Pull Request et attendre un review d'un pair. Dans le cas ou vous avez oublié de procéder à l'étape 7 et/ou 8, la pull request sera impossible si les vérifications échouent.
  11. Supprimer la branche aprĂšs la fusion avec la branche principale (main)

Pour plus d'informations, vous pouvez consulter notre cahier des charge

đŸ€– Cacher les fichiers gĂ©nĂ©rĂ©s automatiquement

Android Studio

Pour cacher les fichiers générés, rendez-vous dans Preferences -> Editor -> File Types et collez la ligne ci-dessous dans ignore files and folders:

*.g.dart;

Visual Studio Code

Rendez-vous dans Preferences -> Settings et chercher Ă  l'aide de la barre de recherche Files:Exclude. Puis ajoutez cette ligne:

**/*.g.dart

đŸ“¶ Infrastructure

Nous utilisons Flutter pour l'application et trois services Firebase:

  • Storage: afin de stocker les fichiers
  • Authentication: afin d'authentifier nos utilisateurs
  • Firestore: afin de stocker nos donnĂ©es au format NoSql

Our Tech Stack

📂 Structure de dossiers

Voici la structure de fichiers que fournit flutter.

CAREOT_APP
├── android
├── assets
├── build
├── ios
├── lib
├── linux
├── macos
├── test
├── web
└── windows

Voici la structure de fichiers que nous avons mis en place.

/lib
├── api
├── model
├── provider
├── router
├── screens
├── scripts
└── widgets
    ├── buttons
    ├── cards
    ├── client_list
    ├── diary
    ├── forms
    ├── login
    ├── profile
    └── register

Plongeons maintenant plus en détail dans le dossier /lib qui contient le code principal de notre application.

1- api — Ce dossier contient les classes permettant de rĂ©cupĂ©rer les donnĂ©es venant de l'Ă©xtĂ©rieur(firebase).
2- model — Ce dossier contient les diffĂ©rents modĂšles que nous utilisons.
3- provider — Ce dossier contient nos provider. Ils contiennent la partie logique de l'app.
4- router — Ce dossier contient l'arboressence de nos diffĂ©rents screens.
5- screens — Ce dossier contient les classes qui assemblent nos diffĂ©rents Ă©lĂ©ments graphique.
6- scripts — 
7- widgets — Ce dossier contient tous les Ă©lĂ©ments graphiques.
8- main.dart - Le point d'entrée de notre application.

📚 Libraries & Outils utilisĂ©s

👀 Test

Afin de respecter nos conventions de codage il faudra que les commandes ci-dessous n'Ă©chouent pas:

  • flutter analyze
  • flutter test

📖 Documentations suplĂ©mentaires

Flutter

Afin de débuter avec le développement de flutter il faut se référer à la documentation en ligne, qui propose des conseils, les références API ainsi que des examples.

Firebase

API

Comme nous utilisons Firebase, nous n'avons pas d'API. Cependant, nous avons une structure similaire qui permet de traiter les données.

Afin de travailler sur les données (CRUD et autre), nous utilisons une interface par type de donnée qui nous permet de changer de services rapidement. Par exemple, nous avons une classe FirebaseMessage qui implémente l'interface IMessage. De cette maniÚre, si on utilisait un autre service, par exemple atlasDB nous pourrions créer la classe AtlasdbMessage.

Exemple pour utiliser l'API Firebase dans notre application.

IMessage messageApi = FirebaseMessage();

messageApi.createMessage();
messageApi.readMessage();
messageApi.updateMessage();
messageApi.deleteMessage();
messageApi.implementNewBadassFunctions(with, crazy, parameters);
...

Our Tech Stack

Frontend

Nous utilisons les providers pour séparer la logique de l'interface.