Flutter Templates
Comment créer une application de réservation d'événements avec Flutter et Back4App
34 min
introduction dans le monde rapide d'aujourd'hui, gérer des événements et des réservations via des applications mobiles est devenu de plus en plus essentiel une application de réservation d'événements permet aux utilisateurs de parcourir les événements à venir, de réserver des billets, de sélectionner des sièges et de gérer leurs réservations sans effort dans ce tutoriel, vous apprendrez à créer une application de réservation d'événements complète en utilisant flutter pour le frontend et back4app comme service backend à la fin de ce tutoriel, vous aurez construit une application fonctionnelle qui affiche une liste d'événements avec des détails permet aux utilisateurs de consulter les horaires des événements et les informations sur les lieux permet la réservation de billets avec sélection de sièges traite les paiements de manière sécurisée (intégration avec une passerelle de paiement) gère les profils des utilisateurs, y compris l'historique des réservations et les préférences commençons ! prérequis pour compléter ce tutoriel, vous aurez besoin de flutter sdk installé sur votre machine locale suivez le guide d'installation de flutter https //flutter dev/docs/get started/install connaissances de base en dart et flutter si vous êtes nouveau sur flutter, envisagez de suivre le tutoriel d'introduction de flutter https //flutter dev/docs/get started/codelab un compte back4app inscrivez vous pour un compte gratuit sur back4app https //www back4app com/ back4app flutter sdk intégré dans votre projet vous pouvez apprendre à le configurer en suivant le guide back4app flutter https //www back4app com/docs/flutter/parse sdk/flutter setup un éditeur de code comme visual studio code ou android studio node js et npm installés pour exécuter les fonctions cloud de back4app installez les depuis le site officiel de node js https //nodejs org/ étape 1 – configuration du backend back4app dans cette étape, vous allez configurer votre projet back4app, créer les classes nécessaires (tables) et configurer le backend pour stocker les données des événements, les informations sur les billets et les profils des utilisateurs 1 1 créer une nouvelle application back4app connectez vous à votre compte back4app cliquez sur "créer une nouvelle application" entrez un nom de l'application (par exemple, "eventbookingapp") et sélectionnez votre icône de l'application cliquez sur "créer" 1 2 configurer les clés de l'application accédez au tableau de bord de votre application cliquez sur "paramètres de l'application" > "sécurité et clés" notez l' id de l'application et le clé client vous en aurez besoin pour initialiser le sdk parse dans votre application flutter 1 3 définir les modèles de données vous devez créer les classes suivantes dans back4app événement stocke les détails de l'événement lieu stocke les informations sur le lieu billet gère la disponibilité et les réservations de billets utilisateur gère les profils des utilisateurs (classe par défaut) créer la classe événement dans la barre latérale gauche, cliquez sur "base de données" pour ouvrir le navigateur de données cliquez sur "créer une classe" sélectionnez "personnalisé" , entrez "événement" comme nom de classe, et cliquez sur "créer la classe" ajoutez les colonnes suivantes à la classe événement nom (chaîne) description (chaîne) date (date) image (fichier) lieu (pointeur vers le lieu) prix (nombre) créer la classe lieu répétez les étapes pour créer une nouvelle classe nommée "lieu" ajoutez les colonnes suivantes nom (chaîne) adresse (chaîne) capacité (nombre) plandesalle (fichier) créer la classe ticket créer une nouvelle classe nommée "ticket" ajouter les colonnes suivantes événement (pointeur vers l'événement) utilisateur (pointeur vers l'utilisateur) numérodesiège (chaîne) prix (nombre) estréservé (booléen) 1 4 activer l'authentification des utilisateurs dans la barre latérale gauche, cliquez sur "paramètres du serveur" > "paramètres généraux" sous "authentification" , assurez vous que "activer les autorisations au niveau de la classe" est coché configurer les autorisations de la classe utilisateur pour permettre aux utilisateurs de s'inscrire et de se connecter 1 5 configurer les fonctions cloud (optionnel pour le traitement des paiements) pour l'intégration des paiements, vous pourriez avoir besoin d'écrire des fonctions cloud cette étape dépendra de la passerelle de paiement que vous choisissez (par exemple, stripe, paypal) consultez la documentation de back4app sur fonctions de code cloud https //www back4app com/docs/platform/parse cloudcode étape 2 – initialisation du projet flutter dans cette étape, vous allez configurer le projet flutter et intégrer le sdk parse de back4app 2 1 créer un nouveau projet flutter ouvrez votre terminal et exécutez flutter create event booking app naviguez vers le répertoire du projet cd event booking app 2 2 ajouter des dépendances ouvrez pubspec yaml et ajoutez les dépendances suivantes dependencies flutter sdk flutter cupertino icons ^1 0 2 parse server sdk flutter ^4 0 1 provider ^6 0 0 \# add any additional packages you need, e g , http, image picker, etc exécutez flutter pub get pour installer les packages 2 3 initialiser le sdk parse dans lib/main dart , importez les packages nécessaires et initialisez parse import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app application id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize( keyapplicationid, keyparseserverurl, clientkey keyclientkey, debug true, autosendsessionid true, ); runapp(myapp()); } class myapp extends statelesswidget { // build your app's ui here } remplacez 'votre id application back4app' et 'votre cle client back4app' par vos clés réelles de back4app étape 3 – mise en œuvre de l'authentification des utilisateurs les utilisateurs doivent s'inscrire et se connecter pour réserver des événements et gérer leurs profils 3 1 créer des écrans d'authentification créez deux nouveaux fichiers dart dans lib/ login screen dart signup screen dart écran de connexion dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class loginscreen extends statefulwidget { @override loginscreenstate createstate() => loginscreenstate(); } class loginscreenstate extends state\<loginscreen> { final texteditingcontroller usernamecontroller = texteditingcontroller(); final texteditingcontroller passwordcontroller = texteditingcontroller(); void douserlogin() async { final username = usernamecontroller text trim(); final password = passwordcontroller text trim(); final user = parseuser(username, password, null); var response = await user login(); if (response success) { // navigate to home screen navigator pushreplacementnamed(context, '/home'); } else { // show error message showerror(response error! message); } } void showerror(string message) { // implement a method to show error messages } @override widget build(buildcontext context) { // build your login ui here } } écran d inscription dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class signupscreen extends statefulwidget { @override signupscreenstate createstate() => signupscreenstate(); } class signupscreenstate extends state\<signupscreen> { final texteditingcontroller usernamecontroller = texteditingcontroller(); final texteditingcontroller passwordcontroller = texteditingcontroller(); void douserregistration() async { final username = usernamecontroller text trim(); final password = passwordcontroller text trim(); final user = parseuser(username, password, null); var response = await user signup(); if (response success) { // navigate to home screen navigator pushreplacementnamed(context, '/home'); } else { // show error message showerror(response error! message); } } void showerror(string message) { // implement a method to show error messages } @override widget build(buildcontext context) { // build your sign up ui here } } 3 2 mettre à jour main dart avec les routes class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( title 'event booking app', initialroute '/login', routes { '/login' (context) => loginscreen(), '/signup' (context) => signupscreen(), '/home' (context) => homescreen(), // add other routes as needed }, ); } } 3 2 mettre à jour main dart avec les routes 3 3 implémenter l'écran d'accueil créez un home screen dart fichier où les utilisateurs authentifiés sont redirigés import 'package\ flutter/material dart'; class homescreen extends statelesswidget { @override widget build(buildcontext context) { // build your home screen ui here } } étape 4 – affichage des événements récupérez les événements de back4app et affichez les dans une liste 4 1 créer le modèle d'événement créez une classe dart event dart dans lib/models/ import 'package\ parse server sdk flutter/parse server sdk dart'; class event extends parseobject implements parsecloneable { event() super( keytablename); event clone() this(); static const string keytablename = 'event'; static const string keyname = 'name'; static const string keydescription = 'description'; static const string keydate = 'date'; static const string keyimage = 'image'; static const string keyvenue = 'venue'; static const string keyprice = 'price'; @override clone(map\<string, dynamic> map) => event clone() fromjson(map); string? get name => get\<string>(keyname); string? get description => get\<string>(keydescription); datetime? get date => get\<datetime>(keydate); parsefilebase? get image => get\<parsefilebase>(keyimage); parseobject? get venue => get\<parseobject>(keyvenue); double? get price => get\<double>(keyprice); } 4 2 récupérer les événements sur l'écran d'accueil dans home screen dart , récupérez les événements et affichez les import 'package\ flutter/material dart'; import 'models/event dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class homescreen extends statefulwidget { @override homescreenstate createstate() => homescreenstate(); } class homescreenstate extends state\<homescreen> { future\<list\<event>> getevents() async { querybuilder\<event> queryevents = querybuilder\<event>(event()) orderbydescending('date'); final parseresponse apiresponse = await queryevents query(); if (apiresponse success && apiresponse results != null) { return apiresponse results as list\<event>; } else { return \[]; } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('events'), ), body futurebuilder\<list\<event>>( future getevents(), builder (context, snapshot) { if (snapshot hasdata) { list\<event> events = snapshot data!; return listview\ builder( itemcount events length, itembuilder (context, index) { event event = events\[index]; return listtile( title text(event name ?? 'no title'), subtitle text(event date? tolocal() tostring() ?? ''), ontap () { // navigate to event details navigator push( context, materialpageroute( builder (context) => eventdetailsscreen(event event), ), ); }, ); }, ); } else if (snapshot haserror) { return center(child text('error loading events')); } else { return center(child circularprogressindicator()); } }, ), ); } } 4 3 créer l'écran des détails de l'événement créer event details screen dart import 'package\ flutter/material dart'; import 'models/event dart'; class eventdetailsscreen extends statelesswidget { final event event; eventdetailsscreen({required this event}); void bookticket(buildcontext context) { // implement ticket booking logic navigator push( context, materialpageroute( builder (context) => seatselectionscreen(event event), ), ); } @override widget build(buildcontext context) { // build ui to display event details return scaffold( appbar appbar( title text(event name ?? 'event details'), ), body column( children \[ // display event image, description, date, venue, etc text(event description ?? ''), elevatedbutton( onpressed () => bookticket(context), child text('book ticket'), ), ], ), ); } } étape 5 – mise en œuvre de la sélection de sièges permettre aux utilisateurs de sélectionner des sièges avant de réserver 5 1 créer l'écran de sélection de sièges créer seat selection screen dart import 'package\ flutter/material dart'; import 'models/event dart'; class seatselectionscreen extends statelesswidget { final event event; seatselectionscreen({required this event}); // mock data for seats final list\<string> seats = list generate(100, (index) => 'seat ${index + 1}'); @override widget build(buildcontext context) { // build ui for seat selection return scaffold( appbar appbar( title text('select seats'), ), body gridview\ builder( griddelegate slivergriddelegatewithfixedcrossaxiscount( crossaxiscount 5, ), itemcount seats length, itembuilder (context, index) { string seat = seats\[index]; return gesturedetector( ontap () { // handle seat selection // navigate to payment screen navigator push( context, materialpageroute( builder (context) => paymentscreen(event event, seat seat), ), ); }, child card( child center(child text(seat)), ), ); }, ), ); } } étape 6 – traitement des paiements intégrer une passerelle de paiement pour traiter les paiements de billets en toute sécurité 6 1 choisir une passerelle de paiement pour ce tutoriel, nous supposerons l'utilisation de stripe https //stripe com/docs/payments 6 2 configurer un compte stripe et obtenir des clés api inscrivez vous pour un compte stripe https //dashboard stripe com/register obtenez votre clé publique et clé secrète 6 3 ajouter la dépendance stripe ajoutez le package stripe payment à votre pubspec yaml dependencies stripe payment ^1 0 9 exécutez flutter pub get 6 4 implémenter l'écran de paiement créer payment screen dart import 'package\ flutter/material dart'; import 'package\ stripe payment/stripe payment dart'; import 'models/event dart'; class paymentscreen extends statefulwidget { final event event; final string seat; paymentscreen({required this event, required this seat}); @override paymentscreenstate createstate() => paymentscreenstate(); } class paymentscreenstate extends state\<paymentscreen> { void initstate() { super initstate(); stripepayment setoptions( stripeoptions( publishablekey 'your stripe publishable key', // optionally set other options ), ); } void startpayment() async { // implement payment logic // create payment method paymentmethod paymentmethod = await stripepayment paymentrequestwithcardform( cardformpaymentrequest(), ); // process the payment using a cloud function or your server // for simplicity, we'll assume payment is successful saveticket(); } void saveticket() async { // save ticket information to back4app final ticket = parseobject('ticket') set('event', widget event) set('user', await parseuser currentuser()) set('seatnumber', widget seat) set('price', widget event price) set('isbooked', true); await ticket save(); // navigate to confirmation screen or display success message } @override widget build(buildcontext context) { // build payment ui return scaffold( appbar appbar( title text('payment'), ), body center( child elevatedbutton( onpressed startpayment, child text('pay \\$${widget event price}'), ), ), ); } } remarque le traitement des paiements nécessite une gestion sécurisée des données sensibles dans une application de production, vous devez traiter les paiements de manière sécurisée en utilisant votre propre serveur ou des fonctions cloud étape 7 – gestion des profils utilisateurs permettre aux utilisateurs de voir et de gérer leurs réservations et préférences 7 1 créer l'écran de profil créer profile screen dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class profilescreen extends statelesswidget { future\<list\<parseobject>> getusertickets() async { final user = await parseuser currentuser(); querybuilder\<parseobject> querytickets = querybuilder\<parseobject>(parseobject('ticket')) whereequalto('user', user) includeobject(\['event']); final parseresponse apiresponse = await querytickets query(); if (apiresponse success && apiresponse results != null) { return apiresponse results as list\<parseobject>; } else { return \[]; } } @override widget build(buildcontext context) { // build profile ui return scaffold( appbar appbar( title text('my profile'), ), body futurebuilder\<list\<parseobject>>( future getusertickets(), builder (context, snapshot) { if (snapshot hasdata) { list\<parseobject> tickets = snapshot data!; return listview\ builder( itemcount tickets length, itembuilder (context, index) { parseobject ticket = tickets\[index]; parseobject event = ticket get('event'); return listtile( title text(event get\<string>('name') ?? 'no event name'), subtitle text('seat ${ticket get\<string>('seatnumber')}'), ); }, ); } else if (snapshot haserror) { return center(child text('error loading tickets')); } else { return center(child circularprogressindicator()); } }, ), ); } } 7 2 ajouter la navigation à l'écran de profil dans votre home screen dart ou le tiroir de navigation principal, ajoutez un lien vers l'écran de profil iconbutton( icon icon(icons person), onpressed () { navigator push( context, materialpageroute(builder (context) => profilescreen()), ); }, ), étape 8 – tester l'application exécutez votre application en utilisant flutter run testez les fonctionnalités suivantes s'inscrire et se connecter voir la liste des événements voir les détails de l'événement sélectionner des sièges et procéder au paiement traiter un paiement (mode test si possible) voir les réservations dans le profil conclusion félicitations ! vous avez construit une application complète de réservation d'événements en utilisant flutter et back4app cette application permet aux utilisateurs de parcourir les événements, de réserver des billets avec sélection de sièges, de traiter les paiements et de gérer leurs profils et réservations à partir de là, vous pouvez améliorer votre application en ajoutant des notifications push pour les rappels d'événements mettant en œuvre la recherche et le filtrage pour les événements améliorant l'ui/ux avec un meilleur design et des animations sécurisant le traitement des paiements avec une validation côté serveur pour plus d'informations sur les fonctionnalités de flutter et back4app, consultez documentation flutter https //flutter dev/docs documentation back4app https //www back4app com/docs guide du cloud code de parse server https //docs parseplatform org/cloudcode/guide/ en intégrant flutter avec back4app, vous tirez parti d'une combinaison puissante pour construire des applications mobiles évolutives et riches en fonctionnalités de manière efficace