Guide Technique: Intégration des Mutations GraphQL avec Flutter
18 min
exemple d'application crud flutter utilisant graphql introduction dans notre premier guide flutter graphql, nous avons appris à configurer un projet flutter en utilisant l'api graphql pour se connecter et interroger des données simples sur back4app également, comment nous pouvons utiliser le playground graphql de back4app pour exécuter des requêtes/mutations afin de créer/populer la base de données de l'application dans ce tutoriel, nous allons ajouter une fonctionnalité avec laquelle nous allons directement créer, mettre à jour et supprimer des données de notre backend back4app directement depuis notre application en utilisant des mutations graphql objectifs à la fin de cet article, nous espérons que vous serez en mesure de créer des données dans notre backend en utilisant l'api graphql mettre à jour des données de notre backend en utilisant l'api graphql supprimer des données existantes du backend en utilisant l'api graphql conditions préalables pour compléter ce tutoriel, vous aurez besoin de vous devrez lire notre guide précédent “projet flutter graphql” https //www back4app com/docs/flutter/graphql/flutter graphql project with source code download afin de comprendre notre point de départ dans ce guide nous allons utiliser le projet précédent, si vous ne l'avez pas, vous pouvez le télécharger ici https //github com/templates back4app/flutter graphql un ide pour écrire du code flutter comme android studio ou vs code un compte back4app qui peut être créé ici https //www back4app com/ dépendance back4app graphql flutter https //pub dev/packages/graphql flutter remarque si vous souhaitez mieux comprendre l'api graphql de back4app, jetez un œil à notre livre de cuisine graphql https //www back4app com/docs/parse graphql/graphql getting started et consultez également notre schéma graphql sur notre api playground 1 configuration de l'interface graphique créez un nouveau fichier \<font color="#2166ae">mutation page dart\</font> ici, nous allons créer notre interface graphique pour prendre des entrées de l'utilisateur et effectuer des tâches de mutation maintenant, collez le code suivant dans \<font color="#2166ae">mutation page dart\</font> 1 import 'package\ back4appgraphqldemo/app ui dart'; 2 import 'package\ back4appgraphqldemo/database utils dart'; 3 import 'package\ flutter/material dart'; 4 5 class mutationpage extends statelesswidget { 6 7 string langname,saveformat,objectid; 8 databaseutils utils; 9 10 @override 11 widget build(buildcontext context) { 12 return appui( 13 onchangedname (text){ 14 langname=text; 15 }, 16 onchangedsaveformat (text){ 17 saveformat=text; 18 }, 19 onchangedobjectid (text){ 20 objectid=text; 21 }, 22 senddatabuttonpressed (){ 23 }, 24 deletedatabuttonpressed (){ 25 }, 26 updatebuttonpressed (){ 27 }, 28 ); 29 } 30 } \<font color="#2166ae">appui()\</font> le widget a déjà été créé pour vous donc, nous avons créé une classe nommée \<font color="#2166ae">mutationpage\</font> et retourné le \<font color="#2166ae">appui\</font> widget comme son widget nous avons également initialisé des fonctions de rappel pour nos champs de texte afin que le texte dans le premier champ de texte soit stocké dans \<font color="#2166ae">langname\</font> , le deuxième dans \<font color="#2166ae">saveformat\</font> et \<font color="#2166ae">objectid\</font> du dernier maintenant, passez à \<font color="#2166ae">main dart\</font> et ajoutez un \<font color="#2166ae">floatingactionbutton\</font> paramètre dans \<font color="#2166ae">scaffold()\</font> widget de \<font color="#2166ae">myhomepage\</font> classe et passez le code suivant dedans 1 floatingactionbutton row( 2 mainaxisalignment mainaxisalignment end, 3 children \[ 4 floatingactionbutton( 5 herotag 'mutation page', 6 child text('m', 7 style textstyle( 8 color colors white, 9 ), 10 ), 11 onpressed (){ 12 navigator pushreplacement(context, materialpageroute( 13 builder ((context){ 14 return mutationpage(); 15 }) 16 )); 17 }, 18 ), 19 ], 20 ), cela créera un bouton flottant qui nous naviguera vers le \<font color="#2166ae">mutationpage()\</font> depuis notre page d'accueil donc maintenant notre interface graphique est prête vous pouvez maintenant redémarrer votre application pour voir l'interface graphique voici à quoi devrait ressembler votre \<font color="#2166ae">main dart\</font> 1 import 'package\ back4appgraphqldemo/mutation page dart'; 2 import 'package\ flutter/material dart'; 3 import 'package\ graphql flutter/graphql flutter dart'; 4 import 'consonents dart'; 5 import 'dart\ ui'; 6 7 void main() { 8 runapp(myapp()); 9 } 10 11 class myapp extends statelesswidget { 12 @override 13 widget build(buildcontext context) { 14 final httplink httplink = httplink( 15 uri 'https //parseapi back4app com/graphql', 16 headers { 17 'x parse application id' kparseapplicationid, 18 'x parse client key' kparseclientkey, 19 'x parse master key' kparsemasterkey, 20 //'x parse rest api key' kparserestapikey, 21 }, //getheaders() 22 ); 23 24 valuenotifier\<graphqlclient> client = valuenotifier( 25 graphqlclient( 26 cache optimisticcache(dataidfromobject typenamedataidfromobject), 27 link httplink, 28 ), 29 ); 30 31 return materialapp( 32 home graphqlprovider( 33 child myhomepage(), 34 client client, 35 ), 36 ); 37 } 38 } 39 40 class myhomepage extends statefulwidget { 41 @override 42 myhomepagestate createstate() => myhomepagestate(); 43 } 44 45 class myhomepagestate extends state\<myhomepage> { 46 string name; 47 string saveformat; 48 string objectid; 49 50 string query = ''' 51 query findlanguages{ 52 languages{ 53 count, 54 edges{ 55 node{ 56 name, 57 saveformat 58 } 59 } 60 } 61 } 62 '''; 63 64 @override 65 widget build(buildcontext context) { 66 return safearea( 67 child scaffold( 68 appbar appbar( 69 title text( 70 'parsing data using graphql', 71 ), 72 ), 73 floatingactionbutton row( 74 mainaxisalignment mainaxisalignment end, 75 children \[ 76 floatingactionbutton( 77 herotag 'mutation page', 78 child text('m', 79 style textstyle( 80 color colors white, 81 ), 82 ), 83 onpressed (){ 84 navigator pushreplacement(context, materialpageroute( 85 builder ((context){ 86 return mutationpage(); 87 }) 88 )); 89 }, 90 ), 91 ], 92 ), 93 body query( 94 options queryoptions( 95 documentnode gql(query), 96 ), 97 builder ( 98 queryresult result, { 99 refetch refetch, 100 fetchmore fetchmore, 101 }) { 102 if (result data == null) { 103 return center( 104 child text( 105 "loading ", 106 style textstyle(fontsize 20 0), 107 )); 108 } else { 109 return listview\ builder( 110 itembuilder (buildcontext context, int index) { 111 return listtile( 112 title text(result data\["languages"]\["edges"]\[index]\["node"] 113 \['name']), 114 trailing text(result data\["languages"]\["edges"]\[index] 115 \["node"]\['saveformat']), 116 117 ); 118 }, 119 itemcount result data\["languages"]\["edges"] length, 120 ); 121 } 122 }, 123 ), 124 ), 125 ); 126 } 127 } 2 création/ajout de données à la base de données si vous procédez à \<font color="#2166ae">graphql configration dart\</font> vous pourriez voir que nous avons déjà configuré notre \<font color="#2166ae">graphqlclient\</font> et maintenant nous pouvons l'utiliser partout passons à la création d'un fichier \<font color="#2166ae">database utils dart\</font> et effectuons une opération pour créer des données créez une classe \<font color="#2166ae">databaseutils{}\</font> et créez un constructeur qui recevra les paramètres de données sur lesquels nous allons travailler, ici nous aurons besoin de \<font color="#2166ae">langname\</font> , \<font color="#2166ae">saveformat\</font> , et \<font color="#2166ae">objectid\</font> 1 import 'package\ back4appgraphqldemo/graphql configration dart'; 2 import 'package\ graphql flutter/graphql flutter dart'; 3 4 class databaseutils{ 5 final string langname,saveformat,objectid; 6 databaseutils({this langname="",this saveformat="",this objectid=""}); 7 } créez une fonction \<font color="#2166ae">adddata()\</font> qui sera une fonction asynchrone pour créer des données et initialiser notre \<font color="#2166ae">graphqlclient\</font> en initialisant \<font color="#2166ae">graphqlconfigration\</font> classe collez le code suivant dans \<font color="#2166ae">senddata()\</font> fonction 1 future\<queryresult> senddata() async{ 2 string adddata=''' 3 mutation createobject(\\$input createlanguagefieldsinput){ 4 createlanguage(input {fields \\$input}){ 5 language{ 6 name, 7 saveformat 8 } 9 } 10 } 11 '''; 12 final variable ={ 13 "input" { 14 "name" langname, 15 "saveformat" saveformat, 16 } 17 }; 18 19 graphqlconfiguration configuration = graphqlconfiguration(); 20 graphqlclient client = configuration clienttoquery(); 21 22 } ici, nous avons initialisé une variable \<font color="#2166ae">adddata\</font> et avons passé la requête pour créer des données et initialisé \<font color="#2166ae">variable\</font> qui passera les variables de requête nous avons également initialisé le \<font color="#2166ae">graphqlclient\</font> qui nous aidera à passer des requêtes nous pouvons passer les requêtes de la manière suivante 1 queryresult queryresult = await client query( 2 queryoptions(documentnode gql(adddata), variables variable), 3 ); 4 return queryresult; nous avons utilisé notre \<font color="#2166ae">graphqlclient\</font> instance pour écrire une requête qui accepte \<font color="#2166ae">queryoptions()\</font> qui nous aide à envoyer une requête comme vous l'avez vu dans le dernier tutoriel le résultat est stocké dans \<font color="#2166ae">queryresult\</font> voici à quoi devrait ressembler votre \<font color="#2166ae">database utils dart\</font> 1 import 'package\ back4appgraphqldemo/graphql configration dart'; 2 import 'package\ graphql flutter/graphql flutter dart'; 3 4 class databaseutils{ 5 final string langname,saveformat,objectid; 6 databaseutils({this langname="",this saveformat="",this objectid=""}); 7 future\<queryresult> senddata() async{ 8 string adddata=''' 9 mutation createobject(\\$input createlanguagefieldsinput){ 10 createlanguage(input {fields \\$input}){ 11 language{ 12 name, 13 saveformat 14 } 15 } 16 } 17 '''; 18 final variable ={ 19 "input" { 20 "name" langname, 21 "saveformat" saveformat, 22 } 23 }; 24 25 graphqlconfiguration configuration = graphqlconfiguration(); 26 graphqlclient client = configuration clienttoquery(); 27 28 queryresult queryresult = await client query( 29 queryoptions(documentnode gql(adddata), variables variable), 30 ); 31 return queryresult; 32 } 33 } maintenant, procédez à votre classe ui \<font color="#2166ae">mutation page dart\</font> codons pour le bouton d'envoi de données qui peut être codé à l'intérieur du \<font color="#2166ae">senddatabuttonpressed \</font> paramètre puisque nous avons besoin de langname et saveformat, vérifiez d'abord s'ils ne sont pas vides, puis créez une instance de \<font color="#2166ae">databaseutils\</font> et passez les \<font color="#2166ae">langname\</font> et \<font color="#2166ae">saveformat\</font> paramètre 1 if(langname isnotempty && saveformat isnotempty){ 2 utils = databaseutils( 3 langname langname, 4 saveformat saveformat , 5 ); 6 } après cela, appelez la \<font color="#2166ae">senddata()\</font> fonction de l'instance \<font color="#2166ae">databaseutils\</font> utils senddata(); maintenant, vous pouvez hot restart l'application, remplissez les deux champs de texte avec leurs données respectives et appuyez sur le bouton d'envoi des données maintenant, revenez à votre page de requête en appuyant sur le bouton d'action flottant et vous pourriez voir qu'une donnée supplémentaire a été ajoutée à notre table voici à quoi ressemblerait votre classe mutationpage 1 import 'package\ back4appgraphqldemo/app ui dart'; 2 import 'package\ back4appgraphqldemo/database utils dart'; 3 import 'package\ flutter/material dart'; 4 5 class mutationpage extends statelesswidget { 6 7 string langname,saveformat,objectid; 8 databaseutils utils; 9 10 @override 11 widget build(buildcontext context) { 12 return appui( 13 onchangedname (text){ 14 langname=text; 15 }, 16 onchangedsaveformat (text){ 17 saveformat=text; 18 }, 19 onchangedobjectid (text){ 20 objectid=text; 21 }, 22 senddatabuttonpressed (){ 23 if(langname isnotempty && saveformat isnotempty){ 24 utils = databaseutils( 25 langname langname, 26 saveformat saveformat , 27 ); 28 utils senddata(); 29 } 30 }, 31 deletedatabuttonpressed (){ 32 }, 33 updatebuttonpressed (){ 34 }, 35 ); 36 } 37 } 3 mise à jour des données dans \<font color="#2166ae">databaseutils\</font> créez une \<font color="#2166ae">future\</font> fonction \<font color="#2166ae">updatedata()\</font> initialisez une \<font color="#2166ae">string update\</font> et passez la requête de mise à jour et les variables de requête dans \<font color="#2166ae">les variables finales\</font> 1 future\<queryresult> updatedata() async{ 2 string update=''' 3 mutation updateobject(\\$id id!,\\$input updatelanguagefieldsinput){ 4 updatelanguage(input {id \\$id, fields \\$input}){ 5 language{ 6 name, 7 id 8 } 9 } 10 } 11 '''; 12 final variable={ 13 "id"\ objectid, 14 "input" { 15 "name" langname 16 } 17 }; 18 } maintenant, initialisez notre \<font color="#2166ae">graphqlclient\</font> et envoyez la requête via \<font color="#2166ae">queryoptions()\</font> voici à quoi ressemblerait votre code 1 future\<queryresult> updatedata() async{ 2 3 string update=''' 4 mutation updateobject(\\$id id!,\\$input updatelanguagefieldsinput){ 5 updatelanguage(input {id \\$id, fields \\$input}){ 6 language{ 7 name, 8 id 9 } 10 } 11 } 12 '''; 13 14 final variable={ 15 "id"\ objectid, 16 "input" { 17 "name" langname 18 } 19 }; 20 21 graphqlconfiguration configuration = graphqlconfiguration(); 22 graphqlclient client = configuration clienttoquery(); 23 24 queryresult queryresult = await client query( 25 queryoptions(documentnode gql(update), variables variable), 26 ); 27 return queryresult; 28 } maintenant revenez à \<font color="#2166ae">mutaion page dart\</font> et codez dans le \<font color="#2166ae">updatebuttonpressed \</font> paramètre vérifiez si \<font color="#2166ae">langname\</font> , \<font color="#2166ae">objectid\</font> et \<font color="#2166ae">saveformat\</font> ne sont pas vides, puis appelez la \<font color="#2166ae">updatedata() \</font> fonction de \<font color="#2166ae">databaseutils\</font> classe 1 updatebuttonpressed (){ 2 if(langname isnotempty && saveformat isnotempty && objectid isnotempty){ 3 utils = databaseutils( 4 langname langname, 5 saveformat saveformat , 6 objectid objectid 7 ); 8 utils updatedata(); 9 } 10 }, allez sur le tableau de bord back4app et choisissez une langue à mettre à jour, puis copiez son objectid redémarrez votre application et remplissez les 3 champs de texte le nouveau nom de la langue que vous souhaitez insérer dans le premier champ de texte et le nouveau format de sauvegarde dans le deuxième et objectid dans le troisième maintenant, appuyez sur le bouton mettre à jour les données et vérifiez les informations mises à jour sur l'application en cliquant sur le bouton d'action flottant q en bas à droite 4 suppression de données créez une \<font color="#2166ae">deletedata()\</font> fonction asynchrone dans \<font color="#2166ae">databaseutils\</font> et initialisez \<font color="#2166ae">string delete\</font> et passez la requête graphql pour supprimer des données prenez \<font color="#2166ae">des variables finales\</font> et passez les variables de requête dedans 1 future\<queryresult> deletedata() async{ 2 string delete=''' 3 mutation deleteobject(\\$id id!){ 4 deletelanguage(input {id \\$id}){ 5 language{ 6 name, 7 id 8 } 9 } 10 } 11 '''; 12 final variable={ 13 "id"\ objectid, 14 }; 15 } dans cela, nous avons seulement besoin de l' \<font color="#2166ae">objectid\</font> de la ligne qui doit être supprimée initialisez le \<font color="#2166ae">graphqlclient\</font> et envoyez la requête via \<font color="#2166ae">queryoptions()\</font> 1 future\<queryresult> deletedata() async{ 2 string delete=''' 3 mutation deleteobject(\\$id id!){ 4 deletelanguage(input {id \\$id}){ 5 language{ 6 name, 7 id 8 } 9 } 10 } 11 '''; 12 final variable={ 13 "id"\ objectid, 14 }; 15 16 graphqlconfiguration configuration = graphqlconfiguration(); 17 graphqlclient client = configuration clienttoquery(); 18 19 queryresult queryresult = await client query( 20 queryoptions(documentnode gql(delete), variables variable), 21 ); 22 23 return queryresult; 24 } dans \<font color="#2166ae">mutationpage\</font> dans le \<font color="#2166ae">deletedatabuttonpressed\</font> vérifiez si le paramètre \<font color="#2166ae">objectid\</font> n'est pas vide ou nul et appelez la \<font color="#2166ae">deletedata()\</font> fonction redémarrez à chaud l'application, entrez l' objectid de la ligne à supprimer et appuyez sur le bouton supprimer les données cela devrait supprimer une ligne spécifique de votre \<font color="#2166ae">langue\</font> classe succès votre application a enfin effectué vos opérations de mutation !!! \<font color="#2166ae">main dart\</font> devrait ressembler à ceci 1 import 'package\ back4appgraphqldemo/mutation page dart'; 2 import 'package\ flutter/material dart'; 3 import 'package\ graphql flutter/graphql flutter dart'; 4 import 'consonents dart'; 5 import 'dart\ ui'; 6 7 void main() { 8 runapp(myapp()); 9 } 10 11 class myapp extends statelesswidget { 12 @override 13 widget build(buildcontext context) { 14 final httplink httplink = httplink( 15 uri 'https //parseapi back4app com/graphql', 16 headers { 17 'x parse application id' kparseapplicationid, 18 'x parse client key' kparseclientkey, 19 'x parse master key' kparsemasterkey, 20 //'x parse rest api key' kparserestapikey, 21 }, //getheaders() 22 ); 23 24 valuenotifier\<graphqlclient> client = valuenotifier( 25 graphqlclient( 26 cache optimisticcache(dataidfromobject typenamedataidfromobject), 27 link httplink, 28 ), 29 ); 30 31 return materialapp( 32 home graphqlprovider( 33 child myhomepage(), 34 client client, 35 ), 36 ); 37 } 38 } 39 40 class myhomepage extends statefulwidget { 41 @override 42 myhomepagestate createstate() => myhomepagestate(); 43 } 44 45 class myhomepagestate extends state\<myhomepage> { 46 string name; 47 string saveformat; 48 string objectid; 49 50 string query = ''' 51 query findlanguages{ 52 languages{ 53 count, 54 edges{ 55 node{ 56 name, 57 saveformat 58 } 59 } 60 } 61 } 62 '''; 63 64 @override 65 widget build(buildcontext context) { 66 return safearea( 67 child scaffold( 68 appbar appbar( 69 title text( 70 'parsing data using graphql', 71 ), 72 ), 73 floatingactionbutton row( 74 mainaxisalignment mainaxisalignment end, 75 children \[ 76 floatingactionbutton( 77 herotag 'mutation page', 78 child text('m', 79 style textstyle( 80 color colors white, 81 ), 82 ), 83 onpressed (){ 84 navigator pushreplacement(context, materialpageroute( 85 builder ((context){ 86 return mutationpage(); 87 }) 88 )); 89 }, 90 ), 91 ], 92 ), 93 body query( 94 options queryoptions( 95 documentnode gql(query), 96 ), 97 builder ( 98 queryresult result, { 99 refetch refetch, 100 fetchmore fetchmore, 101 }) { 102 if (result data == null) { 103 return center( 104 child text( 105 "loading ", 106 style textstyle(fontsize 20 0), 107 )); 108 } else { 109 return listview\ builder( 110 itembuilder (buildcontext context, int index) { 111 return listtile( 112 title text(result data\["languages"]\["edges"]\[index]\["node"] 113 \['name']), 114 trailing text(result data\["languages"]\["edges"]\[index] 115 \["node"]\['saveformat']), 116 117 ); 118 }, 119 itemcount result data\["languages"]\["edges"] length, 120 ); 121 } 122 }, 123 ), 124 ), 125 ); 126 } 127 } \<font color="#2166ae">database utils dart\</font> devrait ressembler à ceci 1 import 'package\ back4appgraphqldemo/graphql configration dart'; 2 import 'package\ graphql flutter/graphql flutter dart'; 3 4 class databaseutils{ 5 6 final string langname,saveformat,objectid; 7 8 databaseutils({this langname="",this saveformat="",this objectid=""}); 9 10 string delete=''' 11 mutation delete languages(\\$id id!){ 12 deletelanguage(input {id \\$id}){ 13 language{ 14 name, 15 id 16 } 17 } 18 } 19 '''; 20 21 string adddata=''' 22 mutation create languages(\\$input createlanguagefieldsinput){ 23 createlanguage(input {fields \\$input}){ 24 language{ 25 name, 26 saveformat 27 } 28 } 29 } 30 '''; 31 string update=''' 32 mutation update languages(\\$id id!,\\$input updatelanguagefieldsinput){ 33 updatelanguage(input {id \\$id, fields \\$input}){ 34 language{ 35 name, 36 id 37 } 38 } 39 } 40 '''; 41 42 future\<queryresult> senddata() async{ 43 44 final variable ={ 45 "input" { 46 "name" langname, 47 "saveformat" saveformat, 48 } 49 }; 50 print('sendingdata'); 51 52 graphqlconfiguration configuration = graphqlconfiguration(); 53 graphqlclient client = configuration clienttoquery(); 54 55 queryresult queryresult = await client query( 56 queryoptions(documentnode gql(adddata), variables variable), 57 ); 58 return queryresult; 59 60 } 61 future\<queryresult> updatedata() async{ 62 final variable={ 63 "id"\ objectid, 64 "input" { 65 "name" langname 66 } 67 }; 68 69 graphqlconfiguration configuration = graphqlconfiguration(); 70 graphqlclient client = configuration clienttoquery(); 71 72 queryresult queryresult = await client query( 73 queryoptions(documentnode gql(update), variables variable), 74 ); 75 return queryresult; 76 } 77 78 79 future\<queryresult> deletedata() async{ 80 final variable={ 81 "id"\ objectid, 82 }; 83 84 graphqlconfiguration configuration = graphqlconfiguration(); 85 graphqlclient client = configuration clienttoquery(); 86 87 queryresult queryresult = await client query( 88 queryoptions(documentnode gql(delete), variables variable), 89 ); 90 91 return queryresult; 92 } 93 } \<font color="#2166ae">mutaion page dart\</font> devrait ressembler à ceci 1 import 'package\ back4appgraphqldemo/app ui dart'; 2 import 'package\ back4appgraphqldemo/database utils dart'; 3 import 'package\ flutter/material dart'; 4 5 class mutationpage extends statelesswidget { 6 7 string langname,saveformat,objectid; 8 databaseutils utils; 9 10 @override 11 widget build(buildcontext context) { 12 return appui( 13 onchangedname (text){ 14 langname=text; 15 }, 16 onchangedsaveformat (text){ 17 saveformat=text; 18 }, 19 onchangedobjectid (text){ 20 objectid=text; 21 }, 22 23 senddatabuttonpressed (){ 24 if(langname isnotempty && saveformat isnotempty){ 25 utils = databaseutils( 26 langname langname, 27 saveformat saveformat , 28 ); 29 utils senddata(); 30 } 31 }, 32 deletedatabuttonpressed (){ 33 if(objectid isnotempty){ 34 utils = databaseutils( 35 objectid objectid, 36 ); 37 utils deletedata(); 38 } 39 }, 40 updatebuttonpressed (){ 41 if(langname isnotempty && saveformat isnotempty && objectid isnotempty){ 42 utils = databaseutils( 43 langname langname, 44 saveformat saveformat , 45 objectid objectid 46 ); 47 utils updatedata(); 48 } 49 }, 50 ); 51 } 52 } conclusion dans ce guide, nous avons utilisé des mutations graphql dans l'application flutter pour créer de nouveaux objets sur back4app ; mettre à jour des objets sur back4app ; supprimer des objets sur back4app à ce stade, vous avez un projet flutter graphql crud entièrement fonctionnel que vous pouvez utiliser comme point de départ pour développer votre prochaine application dans le prochain guide, nous allons plonger profondément dans les requêtes en montrant comment les faire pour récupérer des données de back4app et les afficher sur notre application flutter passez une excellente journée !