Comment créer sa base de données Firebase pour Flutter ?


Avatar de Pierre Courtois

Afin de créer une application dynamique, vous aurez besoin d’utiliser des données sous forme de texte, chiffre, booléens, etc. Ce sont ces données, une fois renvoyées vers votre front-end, qui vont vous permettre de donner vie à votre application. Mais qui dit utiliser des données, dit aussi les stocker. Et c’est ici que qu’utiliser Firebase…


base de données

Présentation de Firebase Firestore

Firestore est le service de base de données, mis à disposition par Firebase. Celui-ci vous permet de stocker, renvoyer, modifier et supprimer des informations, et ainsi vous permettre de créer des applications dynamiques. 

Avantage de la base de données Firebase

Les bases de données faites sur Firebase, sont réalisées en NoSQL. Cela veut dire qu’une collection peut tout à fait contenir des documents n’ayant pas le même format. Je peux par exemple avoir un document A qui contient deux champs “Nom” et “Age” et un document B avec “lieu” et “couleur”, sans que cela pose un problème. 

Ce format présente l’avantage de la “scalabilité”, c’est-à-dire la capacité à faire venir grossir son application avec de nouveaux champs qui n’étaient pas prévus au départ. Par exemple, admettons que je souhaite désormais récupérer le numéro de téléphone de mon utilisateur. Avec une base de données SQL, je ne pourrai pas récupérer cette information si une colonne n’avait pas été prévue pour cela dès le départ. Je vais donc devoir refaire une base de données de 0. Ce problème n’existe plus avec le noSQL, puisque je peux tout à fait ajouter des champs à mes documents déjà existants et même avoir des champs différents selon les documents. 

Tarifs

Le service Firestore est gratuit jusqu’à un certain point, puis devient payant pour chaque utilisation supplémentaire. Voici le détail de la tarification : 

Tarifs des services Firestore
Gratuit jusqu’à  Puis payant selon ce tarif 
1GiB de données stockées  0.1725 $ par GiB et par mois 
10 GiB de consommation de données par mois 0.1725 $ par GiB et par mois 
20K écritures/modifications* de documents par jour  0.1042 $ pour 100 000 documents
50K par document lu  0.0345 $ pour 100 000 documents
20K suppressions de documents par jour  0.0115 $ pour 100 000 documents

* Ici, la création d’un document de 0, ou la modification d’un seul champ sont comptées de la même manière. Si vous modifiez tout un document en une seule fois, cela comptera comme une seule action, même si vous avez modifié plusieurs champs. En revanche, si vous faites 3 modifications pour 3 champs différents, alors cela sera compté comme 3 modifications.

**Ici, un document lu équivaut à un document qui est renvoyé vers votre front-end. Si vous appelez 10 documents parmi une collection de 100 documents, alors cela compte pour 10 actions et non pas 100, quand bien même le robot a dû consulter chaque document pour vérifier s’il correspondait à la requête.

Fonctionnement d’une base de données Firebase

3 notions sont à connaître pour comprendre l’organisation d’une base de données Firebase :

  • Les collections ; 
  • Les documents ; 
  • Les champs. 

Votre base de données Firebase prend la forme d’un arbre. À la base, on trouve une collection, remplie de documents. Ces documents seront peut-être remplis de sous collections, qui contiendront elles-mêmes des sous-documents, etc. Ces collections et ces documents sont définis, d’abord par des noms uniques qui permettent de les retrouver, mais aussi par des champs. Ces champs sont définis par un nom et contiennent chacun les informations que vous souhaitez stocker et renvoyer. 

Ces 3 choses servent donc à composer une adresse unique qui va vous permettre de retrouver la valeur dont vous avez besoin. Par exemple, admettons que je souhaite retrouver l’age de mon utilisateur. Je vais pour cela aller dans ma collection ‘User’, qui contient un document pour chaque personne qui utilise mon application. Je vais retrouver le bon document avec l’ID de mon utilisateur. Puis, il ne me reste plus qu’à renvoyer le champ “Age” qui contient comme son nom l’indique son âge.

Créer et modifier votre base de données

La première chose à faire pour créer votre base de données Firebase est de créer un projet et de le connecter à votre application Flutter. Si vous ne savez pas comment faire, je vous invite à lire mon article qui traite de comment installer Firebase pour Flutter

Une fois cela fait, rendez-vous sur la page principale de votre projet Firebase. Cliquez sur le bouton “Cloud Firestore”, puis “créer une base de données”. Sélectionnez la zone géographique où vous souhaitez que votre back-end soit hébergée (idéalement là où se trouvent vos utilisateurs pour réduire le temps d’attente). Cliquez sur suivant pour fixer vos règles de sécurité (vous pouvez commencer en mode test). Ça y est, votre base de données est prête à fonctionner. Ne reste plus qu’à y ajouter les informations dont vous avez besoin.

Changer vos règles de sécurité

Si vous mettez votre application en mode test, vos règles de sécurité seront changées après 30 jours et vous ne pourrez plus manipuler vos données. Allez dans règles et coller le code qui suit, qui permettre à n’importe quelle personne ayant un compte sur votre application de pouvoir utiliser la base de données depuis le front end.

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Le CRUD

Bien que vos collections et vos documents puissent être modifiés à la main, le but est d’automatiser cette partie. Firebase va ainsi mettre à disposition des fonctions pour créer, consulter, modifier et supprimer vos documents facilement. Ces méthodes portent le nom de CRUD pour : 

  1. Create (créer) ; 
  2. Review (Consulter) ; 
  3. Update (Modifier) ; 
  4. Delete (Supprimer). 

Avant d’utiliser ces méthodes, la première chose est d’importer les packages dont vous allez avoir besoin dans Visual Studio. Puis, placez-les en haut des fichiers .dart où vous comptez les utiliser : 

Vous ne savez pas ce qu’est un package ou comment l’importer sur votre application ? Je vous invite à consulter mon article qui traite des packages sur Flutter

Create

La première chose à faire pour ajouter un document à votre collection depuis le front end est de créer une “instance”, c’est-à-dire un objet qui va vous permettre de manipuler des documents avec Firebase. Vous pouvez stocker cette instance dans une variable, pour pouvoir la réutiliser dans tous vos documents, comme cela : 

firebase = FirebaseFirestore.instance

Par la suite, la méthode à utiliser pour ajouter un document est la suivante : 

firebase.
collection("le_nom_de_votre collection")
.doc("le_nom_de_votre_document")
.add({
"Nom du champ 1": "Valeur 1"; 
"Nom du champ 2": "Valeur 2";
"Nom du champ 1": "Valeur 3";
etc
}).

Si la collection dans laquelle vous souhaitez créer le document n’existe pas, alors celle-ci sera créée en même temps que le document.

Il est aussi possible d’utiliser la méthode :

firebase.
collection("le_nom_de_votre collection")
.doc(“le_nom_de_votre_document”)
.set({
"Nom du champ 1": "Valeur 1"; 
"Nom du champ 2": "Valeur 2";
"Nom du champ 3": "Valeur 3";
etc…
}).

Pour les collections d’utilisateurs, je vous recommande d’utiliser l’identifiant unique qui est généré automatiquement par Firebase quand un utilisateur est ajouté. Cela vous permettra de retrouver plus facilement le bon document.

Les valeurs que vous entrez sont case sensitives. Si vous mettez des guillemets, Firebase considérera que votre valeur est une chaîne de caractère, qui va affecter par la suite la manière de la récupérer. Si vous souhaitez stocker un chiffre ou une valeur booléenne, ne mettez donc pas de guillemets.

Review

Si vous ne l’avez pas déjà fait, la première chose à faire pour consulter un document dans votre base de données est de créer une “instance”, c’est-à-dire un objet qui va vous permettre de manipuler des documents avec Firebase. Vous pouvez stocker cette instance dans une variable, pour pouvoir la réutiliser dans tous vos documents, comme cela : 

firebase = FirebaseFirestore.instance

Par la suite, la méthode à utiliser pour consulter un document et le renvoyer vers votre front-end est la suivante :

firebase.
collection("le_nom_de_votre collection")
.doc("le_nom_de_votre_document")
.get()

Il est aussi possible d’utiliser :

firebase.
collection("le_nom_de_votre collection")
.doc("le_nom_de_votre_document")
.snapshot()

Les deux méthodes sont similaires, mais get produit une requête unique alors que snapshot garde votre flux ouvert pour mettre à jour vos valeurs en front-end si celles-ci viennent à changer dans le back-end. 

Update

Si vous ne l’avez pas déjà fait, la première chose à faire pour consulter un document dans votre base de données est de créer une “instance”, c’est-à-dire un objet qui va vous permettre de manipuler des documents avec Firebase. Vous pouvez stocker cette instance dans une variable, pour pouvoir la réutiliser dans tous vos documents, comme cela : 

firebase = FirebaseFirestore.instance

Par la suite, la méthode à utiliser pour modifier un document est la suivante :

firebase.
collection("le_nom_de_votre collection")
.doc("le_nom_de_votre_document")
.update({
"Nom du champ à modifier 1": "Nouvelle valeur 1"; 
"Nom du champ à modifier 2": "Nouvelle valeur 2";
etc…
})

Il est aussi possible d’utiliser :

firebase.
collection("le_nom_de_votre collection")
.doc("le_nom_de_votre_document")
.set({
"Nom du champ à modifier 1": "Nouvelle valeur 1"; 
"Nom du champ à modifier 2": "Nouvelle valeur 2";
etc…
})

La méthode set va supprimer tous les champs de votre document pour les remplacer par ce que vous aurez mis entre crochets. Faites donc attention en l’utilisant.

Delete

Si vous ne l’avez pas déjà fait, la première chose à faire pour consulter un document dans votre base de données est de créer une “instance”, c’est-à-dire un objet qui va vous permettre de manipuler des documents avec Firebase. Vous pouvez stocker cette instance dans une variable, pour pouvoir la réutiliser dans tous vos documents, comme cela : 

firebase = FirebaseFirestore.instance

Par la suite, la méthode à utiliser pour supprimer un document est la suivante :

firebase.
collection("le_nom_de_votre collection")
.doc("le_nom_de_votre_document")
.delete()

Conclusion

Vous êtes désormais capable de créer une base de données Firebase, dans laquelle vous allez pouvoir créer des collections, des documents et des champs, à la main, ou bien depuis votre application Flutter. La prochaine étape de votre apprentisage va maintenant être d’apprendre à créer des profils d’utilisateurs dans Firebase et à les gérer :

Avatar de Pierre Courtois