Documentation D'installation Flutter
Documentation D'installation Flutter
Objectifs :
Partie 1 : Préparation de l'Environnement de Développement
Installer Flutter et Android Studio afin de préparer l'environnement de développement.
Comprendre l'architecture et la structure d'un projet Flutter, en se familiarisant avec les
fichiers générés et leur rôle.
Introduction :
Cette documentation présente le processus d'installation et de manipulation de l'application mobile
FitPlanner, tout en fournissant une introduction à l'architecture d'une application simple créée avec
Flutter. L'objectif principal est de concevoir les premières interfaces de FitPlanner, une application
dédiée à la gestion des programmes de fitness. L'utilisateur entre ses données personnelles, telles
que le poids et la taille, et l'application propose des exercices physiques ainsi que des recettes
adaptées à ses objectifs.
Nous utiliserons Flutter, un framework open-source développé par Google, qui permet de créer
des applications mobiles, web et desktop à partir d'un seul codebase. Flutter est particulièrement
adapté pour cette application en raison de sa capacité à générer des interfaces fluides, performantes
et interactives, tout en facilitant le développement multiplateforme, ce qui permet de cibler
Android et iOS simultanément.
1
Partie 1 : Préparation de l'Environnement de Développement
Si vous avez déjà installé votre environnement de travail et testé votre premier projet Flutter, vous
pouvez passer cette section.
Prérequis Matériels
Exigence Minimum Recommandée
Source developer.android.com
Installation
Android Studio :
Commencez par installer Android Studio en suivant le lien officiel : Installer
Android Studio
Flutter
Pour installer Flutter, veuillez consulter la documentation officielle à l'adresse
suivante : Installer Flutter
Git for Windows
Vous aurez également besoin de Git. Installez-le en visitant ce lien : Installer
Git for Windows
Visual Studio
Si vous n'avez pas encore installé Visual Studio, vous pouvez le faire ici :
Installer Visual Studio
Création du Projet
Après avoir installé l'ensemble des outils nécessaires, suivez les étapes ci-dessous pour créer le
projet Flutter.
2
Installation du plugin Flutter dans Android
Studio
Ouvrez Android Studio.
Rendez-vous dans l'onglet Plugins.
Recherchez le plugin Flutter dans la
barre de recherche.
Installez-le, comme illustré dans
l'exemple ci-dessous
Configuration du Device Manager
Pour configurer un appareil virtuel afin de tester votre application Flutter, suivez les étapes ci-
dessous dans Android Studio :
Accéder au Device Manager
Dans la barre de menu du Android Studio, cliquez sur Tools puis sélectionnez Device
Manager.
Ajouter un nouvel appareil
Cliquez sur le bouton + (Ajouter un nouveau dispositif), comme illustré dans la capture
d'écran ci-dessous.
Sélectionner un appareil
Choisissez un modèle d'appareil parmi la liste des dispositifs proposés (ex : Pixel 8, Pixel
8 Pro, etc.).
Choisir un système d'exploitation
Sélectionnez la version du système d'exploitation Android que vous souhaitez utiliser pour
l'appareil virtuel.
3
Vérification de l'installation de Flutter
Ouvrez l'invite de commande (cmd).
Tapez la commande suivante pour vérifier l'installation de Flutter et connaître
l'emplacement du SDK sur votre machine : flutter doctor –v
Notez l'emplacement du SDK Flutter.
4
Sous l'onglet SDK Tools, assurez-vous que la version adéquate du SDK Android est bien
installée.
Suivez ces étapes pour vous assurer que votre environnement de développement Flutter est
correctement configuré et que le SDK est installé.
Création du projet dans Android Studio
Retournez dans Android Studio.
Sélectionnez Créer un nouveau projet sous la section Générateurs à gauche.
Choisissez l'option Flutter.
Lors de la configuration, entrez le chemin du SDK Flutter, comme indiqué sur la capture
d'écran.
Nommer le projet
Donnez au projet le nom FitPlanner.
Choisissez le langage Java pour le développement.
5
Architecture Générale du Projet Flutter
Dossier lib : Le dossier lib est l'emplacement
principal où se trouvent tous les fichiers du code
source de votre application Flutter. C'est ici que
vous allez créer et organiser les fichiers Dart
nécessaires au développement des différentes
fonctionnalités de votre application.
Fichier main.dart : Le fichier main.dart, situé dans
le dossier lib, est le point d'entrée de l'application.
C'est ce fichier qui contient la fonction principale
(main()) et qui est exécuté lorsque l'application
démarre. Il configure et lance l'interface utilisateur
initiale.
Fichier pubspec.yaml : Le fichier pubspec.yaml
contient les informations de configuration de votre
projet Flutter. Il spécifie les dépendances
(packages), les ressources (images, polices), ainsi que les versions de Flutter et Dart
utilisées. C'est un fichier essentiel pour gérer les bibliothèques et les configurations de
l'application.
1. Scaffold
Paramètres principaux: appBar, body, floatingActionButton, drawer, backgroundColor,
bottomNavigationBar
Description : Scaffold est une classe fondamentale qui fournit la structure de base pour une
interface utilisateur Flutter. Elle permet de définir l'AppBar, le Body, un bouton d'action flottant
(FloatingActionButton), et d'autres composants de mise en page. C'est le conteneur principal d'une
page dans une application Flutter.
2. AppBar
Paramètres principaux : title, backgroundColor, actions, leading, elevation
Description : AppBar représente la barre d'application située en haut de l'écran. Elle permet
d'afficher un titre, des actions (boutons), et une icône de navigation (par exemple, un menu ou un
bouton retour).
6
3. Body
Paramètre principal : child
Description : Le Body d'un Scaffold est la zone principale d'affichage des contenus. Il est
généralement constitué de widgets, comme des colonnes (Column), des lignes (Row), ou d'autres
mises en page qui structurent les éléments visuels.
4. FloatingActionButton
Paramètres principaux : onPressed, child, backgroundColor, tooltip
Description : Le FloatingActionButton est un bouton d'action circulaire qui flotte au-dessus de
l'interface. Il est généralement utilisé pour déclencher une action importante, comme ajouter un
nouvel élément ou lancer une tâche spécifique.
5. Text
Paramètres principaux : data, style, textAlign, overflow, maxLines
Description : Le widget Text permet d'afficher une chaîne de caractères. Il supporte différents
styles et alignements, ainsi que des options pour gérer le dépassement de texte (overflow) ou
limiter le nombre de lignes affichées.
6. Drawer
Paramètres principaux : child, elevation, semanticLabel
Description : Drawer est un panneau latéral qui s'affiche en glissant depuis le bord gauche de
l'écran. Il contient des options de navigation ou des informations supplémentaires pour l'utilisateur,
généralement accessible via l'icône de menu de l'AppBar.
7. ElevatedButton
Paramètres principaux : onPressed, child, style, onLongPress
Description : Un ElevatedButton est un bouton surélevé qui réagit au clic. Il est souvent utilisé
pour les actions primaires dans une interface utilisateur et peut être personnalisé en termes de style
et d'apparence.
8. Column
Paramètres principaux : children, mainAxisAlignment, crossAxisAlignment
Description : Le widget Column permet d'afficher une liste de widgets verticalement. Les
paramètres permettent de gérer l'alignement des enfants le long de l'axe principal et de l'axe
secondaire.
9. Row
Paramètres principaux : children, mainAxisAlignment, crossAxisAlignment
7
Description : Similaire à Column, le widget Row dispose les enfants horizontalement. Il est utilisé
lorsque l'on souhaite afficher plusieurs widgets sur une même ligne.
10.Container
Paramètres principaux : child, padding, margin, color, width, height
Description : Container est un widget polyvalent qui peut contenir d'autres widgets et leur
appliquer des contraintes de taille, des marges, des couleurs, et des bordures. Il est utilisé pour
organiser les widgets à l'écran.
Ces classes sont fondamentales pour la création d'interfaces en Flutter. Vous trouverez ci-dessous
des illustrations et explications supplémentaires.
8
Étapes préliminaires avant de créer l’application :
Lancez le code pour la première fois en suivant les instructions.
Ouverture du simulateur
:Démarrez le simulateur tel
qu'indiqué dans la capture
d'écran. Une fois le
simulateur ouvert, cliquez
sur "Run".
Temps d'exécution :
L’exécution initiale du
projet peut prendre du
temps. Cela est normal et
peut être dû à divers
facteurs tels que la connexion Internet.
9
2. Modification de main.dart :
Dans le fichier main.dart, supprimez le code existant et remplacez-le par le code suivant. Ce
code permet de définir :
Le nom de l’application
Le thème de l’application
Les routes : Un système de navigation qui relie chaque route à une page spécifique. Cela
inclut les trois pages que nous venons de créer : gender.page, name.page, et
goal.page.
import 'package:flutter/material.dart';
import 'ui/pages/gender.page.dart';
import 'ui/pages/goal.page.dart';
import 'ui/pages/name.page.dart';
void main() {
runApp(const MyApp());
}
10
3. Création du Formulaire Utilisateur et Navigation:
Utilisation de StatefulWidget :
Comme cette page comporte des éléments de
formulaire et nécessite une interaction
utilisateur, il est recommandé d’utiliser un
widget StatefulWidget. Contrairement au
StatelessWidget, le StatefulWidget permet
de gérer et de suivre les changements d’état de
l’interface (par exemple, la progression ou la sélection d’une option).
11
class GenderPage extends StatefulWidget{
const GenderPage({super.key});
@override
GenderState createState() => GenderState();
}
Autres éléments :
Text() pour les textes.
ElevatedButton() pour les boutons principaux.
TextButton() pour les options supplémentaires.
12
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
14
5. Amélioration de la disposition des widgets :
Bien que tous les éléments soient définis, leur placement peut nécessiter des ajustements. On doit
donc utiliser des widgets tels que Padding() pour ajouter des marges autour des éléments, et
Spacer() pour ajouter des espaces afin que les widgets se positionnent correctement en bas de la
page et AnimatedContainer() pour les animations.
15
AnimatedContainer : Chaque option est placée dans un AnimatedContainer,
offrant une animation pour la taille des images lors de la sélection.
AnimatedSwitcher : En fonction de selectedIndex, l'image change en douceur
grâce à AnimatedSwitcher, alternant entre une version sélectionnée et une version
non sélectionnée de l’image (ex. : maleGenderSelected.png pour la sélection,
maleGender.png sinon).
Contenu du Pop-up :
Le bottom sheet contient trois boutons, chacun correspondant
à une méthode d'authentification :
16
import 'package:flutter/material.dart';
import 'name.page.dart';
17
),
),
const SizedBox(
height: 120.0,
),
const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ImageButtonGroup(),
],
),
const Spacer(),
ElevatedButton(
onPressed: (){
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) =>
NamePage(),
transitionsBuilder: (context, animation,
secondaryAnimation, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
),
);
},
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF78B500),
minimumSize: const Size(300.0, 70.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
),
child:
const Text('Next',
style: TextStyle(
color: Color(0xFFFFFFFF),
fontSize: 24.0,
fontFamily: 'SF Pro Display',
),
),
),
const SizedBox(
height: 30.0,
),
Row(
children: [
Expanded(
child: Container(
height: 1,
color: Colors.grey,
),
),
const Padding(
18
padding: EdgeInsets.symmetric(horizontal: 10.0),
child: Text(
'Already our member ?',
style: TextStyle(
fontSize: 14,
color: Colors.grey),
),
),
Expanded(
child: Container(
height: 1,
color: Colors.grey,
),
),
],
),
TextButton(onPressed: (){
showAuthOptions(context);
},
child: const Text('Continue with your existing account >',
style: TextStyle(
fontSize: 16.0
),
)
),
],
),
),
);
}
19
style: TextStyle(
color: Colors.white,
fontSize: 22.0
),
),
],
),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red,
),
child: Row(
children: [
Image.asset("assets/photos/google.png",
width: 20,
),
SizedBox(width: 50.0,),
Text('Continue with Google',
style: TextStyle(
color: Colors.white,
fontSize: 22.0
),
),
],
),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: Row(
children: [
Icon(Icons.mail,
color: Color(0xFF78B500),
),
SizedBox(width: 50.0,),
Text('Continue with FP account',
style: TextStyle(
color: Color(0xFF78B500),
fontSize: 22.0
),
),
],
),
),
],
),
);
},
);
}
20
}
@override
Widget build(BuildContext context) {
return AnimatedContainer(
duration: const Duration(milliseconds: 800),
curve: Curves.linear,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
selectedIndex == 0
? 'assets/photos/backMale.png'
: 'assets/photos/backFemale.png'
),
fit: BoxFit.cover,
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
onTap: () => onSelect(0),
child: AnimatedContainer(
duration: const Duration(milliseconds: 500),
curve: Curves.easeInOut,
width: selectedIndex == 0 ? 212 : 159,
height: selectedIndex == 0 ? 300 : 225,
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 500),
child: Image.asset(
selectedIndex == 0
? 'assets/photos/maleGenderSelected.png'
: 'assets/photos/maleGender.png',
key: ValueKey(selectedIndex == 0),
),
)
),
),
GestureDetector(
onTap: () => onSelect(1),
child: AnimatedContainer(
duration: const Duration(milliseconds: 500),
21
curve: Curves.easeInOut,
width: selectedIndex == 1 ? 212 : 159,
height: selectedIndex == 1 ? 300 : 225,
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 500),
child: Image.asset(
selectedIndex == 1
? 'assets/photos/femaleGenderSelected.png'
: 'assets/photos/femaleGender.png',
key: ValueKey(selectedIndex == 1),
),
)
),
),
],
),
);
}
}
22
10. Création de name.page.dart
dependencies:
flutter_launcher_icons: "^0.14.1"
flutter_launcher_icons:
android: "launcher_icon"
ios: true
image_path: "assets/photos/icon.png"
23
min_sdk_android: 24
adaptive_icon_background: "#ffffff"
adaptive_icon_foreground: "assets/photos/icon.png"
3. Rafraîchissement du simulateur :
Si l'icône ne change pas immédiatement, essayez de fermer et de relancer le simulateur.
4. Versions antérieures de Flutter :
Si vous utilisez une version antérieure de Flutter, vous pouvez omettre les deux lignes
suivantes, car elles concernent les icônes adaptatives :
adaptive_icon_background: "#ffffff"
adaptive_icon_foreground: "assets/photos/icon.png"
24