Skip to content

Latest commit

 

History

History
255 lines (191 loc) · 10.5 KB

README.md

File metadata and controls

255 lines (191 loc) · 10.5 KB

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.