0% ont trouvé ce document utile (0 vote)
4 vues14 pages

Résumé Flutter

Flutter est un SDK développé par Google pour créer des applications multi-plateformes en utilisant le langage DART et des widgets. Les applications Flutter sont composées de widgets, de ressources et de fichiers de configuration, et peuvent être stateless ou stateful selon la gestion de l'état. Le document détaille également la structure d'une application Flutter, les étapes de lancement, ainsi que les concepts clés comme le cycle de vie des widgets et la configuration via le fichier pubspec.yaml.

Transféré par

medaminefah
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues14 pages

Résumé Flutter

Flutter est un SDK développé par Google pour créer des applications multi-plateformes en utilisant le langage DART et des widgets. Les applications Flutter sont composées de widgets, de ressources et de fichiers de configuration, et peuvent être stateless ou stateful selon la gestion de l'état. Le document détaille également la structure d'une application Flutter, les étapes de lancement, ainsi que les concepts clés comme le cycle de vie des widgets et la configuration via le fichier pubspec.yaml.

Transféré par

medaminefah
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

I Flutter Essentials Summary

Dr. Mohammed BOUSMAH - Teacher’s Notes Integration

Ç Définitions Fondamentales
Flutter : Architecture & But

— Flutter : Google SDK for building cross-platform apps (Android, iOS, Windows, MacOS, Linux . . .) based
on DART and Widgets.
— Est un SDK développé par Google pour développer des applications multi-plateformes.
— Basé en langage DART et Widgets.

Widget : Le Composant de Base

— Widget : DART class which returns a graphical element (GUI).


— Est une classe DART qui retourne un élément graphique (GUI).
— Se compose de : Σ clé et Σ valeurs.
— Qui peuvent être : Simple ou Widget (un widget dans un widget).

ó Structure d’une Application Flutter


La Formule Globale
Flutter App = Σ Widgets + Σ Resources + Σ Config files

Structure des Widgets (Key :Value)

// Schema de principe
Widget (
key1 : value1 ,
key2 : value2 ,
...
)

Détails de la Structure
— Σ Widgets : Ensemble de widgets.
— Stateless Widget : Statique.
— Stateful Widget : Dynamique.
— Σ Resources : Ensemble de ressources (se trouvent dans le dossier Assets).
— Σ Config files : Ensemble de fichiers de configuration (comme [Link]).

Documentation & Packages

— [Link] : The official package repository for DART and Flutter.


— C’est le package repository officiel pour DART et Flutter.

1
Ç Étapes de lancement de Flutter

1 Flutter doctor
Allez au Terminal → cd .../.../...<path vers dossier contenant projets> →

flutter doctor

2 Command "code ."


Tapez: code . → Lancer Visual Studio Code

3 Flutter create (nouveau lib)


Allez au Terminal de l’IDE


flutter create <nom_projet> –org com....<votre_nom>

4 Flutter run (exécution)

cd .../.../...<path vers dossier contenant projets>/ <nom_projet> –org com....<votre_nom>


flutter run

StatelessWidget vs StatefulWidget
□ 1. StatelessWidget (Statique)
Définition & Usage

— Immuable : Son apparence ne change jamais une fois construit.


— Performance : Très léger car il ne gère pas d’état interne.
— Usage : Idéal pour les icônes, les labels de texte ou les boutons simples.

2
Exemple complet : MyApp (Stateless)

import ’ package : flutter / material . dart ’;

// Point d ’ entree : execute l ’ application


void main () {
runApp ( MySimpleApp () ) ;
}

class MySimpleApp extends StatelessWidget {


@override
Widget build ( BuildContext context ) {
return MaterialApp (
debugShowCheckedModeBanner : false ,
home : Scaffold (
appBar : AppBar ( title : Text ( ’ App Statique ’) ) ,
body : Center ( child : Text ( ’ Salam Flutter ! ’) ) ,
),
);
}
}

Analyse Détaillée : StatelessWidget

— runApp() : La fonction qui "gonfle" le widget racine et l’affiche à l’écran.

void main() { runApp(MySimpleApp()); }

— MaterialApp : Le widget coeur qui configure le design "Material", incluant


debugShowCheckedModeBanner pour cacher la bannière "Debug".

return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(...)
);

— home : L’attribut qui définit la page principale (écran par défaut) de l’application.
— Scaffold : Fournit la structure visuelle standard.
— appBar : Définit une barre de titre en haut via le widget AppBar.
— body : Contient le contenu principal de l’écran (ici un Center avec du Text).

home: Scaffold(
appBar: AppBar(title: Text(’App Statique’)),
body: Center(child: Text(’Salam Flutter!’)),
)

3
L 2. StatefulWidget (Dynamique)
Définition & État
— Mutable : Peut se redessiner plusieurs fois durant son cycle de vie.
— State : Gère des données qui changent (ex : un compteur, une saisie utilisateur).
— Usage : Formulaires, listes dynamiques, boutons d’action.

Exemple complet : Compteur (Stateful)

import ’ package : flutter / material . dart ’;

class MyApp2 extends StatefulWidget {


@override
_MyApp2State createState () = > _MyApp2State () ;
}

class _MyApp2State extends State < MyApp2 > {


int _i = 0; // Donnee qui va changer ( Etat )

@override
Widget build ( BuildContext context ) {
return MaterialApp (
debugShowCheckedModeBanner : false ,
home : Scaffold (
appBar : AppBar ( title : Text ( ’ TP Compteur ’) ) ,
body : Center (
child : Text ( ’ Valeur : $_i ’ , style : TextStyle ( fontSize :
33) ) ,
),
floatingActionButton : FloatingActionButton (
child : Icon ( Icons . add ) ,
onPressed : () {
setState (() { _i ++; }) ; // Dit a Flutter de
redessiner l ’ UI
},
),
),
);
}
}

4
Analyse Détaillée : StatefulWidget

— Etat (_i) : Une variable privée qui stocke la donnée dynamique.


— setState() : LA MÉTHODE LA PLUS IMPORTANTE. Elle notifie Flutter que l’état a changé, ce
qui force le widget à ré-exécuter sa méthode build().

onPressed: () {
setState(() { _i++; });
}

— Scaffold Components :
— appBar : Utilise AppBar(title: ...) pour l’entête.
— body : Utilise Center pour aligner le texte au milieu.
— floatingActionButton : Spécifie un bouton flottant circulaire (‘FloatingActionButton‘).

home: Scaffold(
appBar: AppBar(title: Text(’TP Compteur’)),
body: Center(child: Text(’Valeur : $_i’, ...)),
floatingActionButton: FloatingActionButton(...)
)

5
ß Focus : Le Widget Scaffold
Focus : Scaffold (Définition)

— Scaffold : Squelette de page (Layout) respectant le Material Design.


— Rôle : Fournit l’API pour organiser les zones (appBar, body, fab, drawer, etc.).
— Structure : Gère automatiquement le positionnement des widgets majeurs.

SCAFFOLD (Skeleton)

Usage : Barre d’outils en haut de l’écran.


Attributs clés :
— title : Texte ou widget principal de la barre.
appBar
— centerTitle : Booléen pour centrer le titre.
— elevation : Intensité de l’ombre sous la barre.
— actions : Liste de widgets (icônes cliquables).

Usage : Support du contenu principal.


Attributs clés :
body — child : Le widget unique à afficher (ex : Center,
Column).
— Note : Occupe tout l’espace entre l’AppBar et le bas.

Usage : Menu latéral coulissant (gauche).


Attributs clés :
drawer — child : Contenu du menu (souvent une ListView).
— elevation : Ombre du panneau de menu.

Usage : Bouton d’action flottant (primaire).


Attributs clés :
floatingAction — onPressed : Fonction déclenchée au clic.
Button — tooltip : Texte affiché au survol/appui long.
— backgroundColor : Couleur de fond du bouton.

6
Implémentation de Référence : Scaffold & Attributs

import ’ package : flutter / material . dart ’;

class DetailedScaffoldExample extends StatelessWidget {


@override
Widget build ( BuildContext context ) {
return Scaffold (
// 1. Barre de titre ( AppBar )
appBar : AppBar (
title : Text ( ’ Ma Super App ’) , // Titre affiche ( title )
centerTitle : true , // Centre le titre (
centerTitle )
elevation : 10.0 , // Intensite de l ’ ombre (
elevation )
actions : [ // Liste d ’ actions ( actions )
IconButton ( icon : Icon ( Icons . search ) , onPressed : () {}) ,
],
),

// 2. Menu lateral ( Drawer )


drawer : Drawer ( // Menu escamotable ( drawer )
elevation : 16.0 , // Ombre du menu ( elevation )
child : ListView ( // Liste d ’ elements ( child )
children : [ Text ( ’ Parametres ’) ] ,
),
),

// 3. Contenu principal ( Body )


body : Center ( // Centre le contenu ( child )
child : Text ( ’ Zone de contenu body ’) ,
),

// 4. Bouton flottant ( FAB )


floatingActionButton : FloatingActionButton (
backgroundColor : Colors . blue , // Couleur de fond (
backgroundColor )
onPressed : () {} , // Action au clic ( onPressed
)
tooltip : ’ Ajouter ’ , // Aide textuelle ( tooltip )
child : Icon ( Icons . add ) , // Icone centrale ( child )
),

// Barre de navigation ( Optionnel )


bottomNavigationBar : BottomAppBar (
color : Colors . blue ,
child : Container ( height : 50.0) ,
),
);
}
}

7
L Le Cycle de Vie (Lifecycle)
I 1. Cycle de Vie de l’Application
États de l’App (Teacher Style)

— Resumed : Application visible et au premier plan (Actif).


— Inactive : Transition (ex : appel entrant, multitâche).
— Paused : En arrière-plan, non visible (Sommeil).
— Detached : L’application est détachée du moteur Flutter (Quitté).

RESUMED
(Actif )

INACTIVE
(Interruption)

PAUSED
(Arrière-plan)

DETACHED
(Terminé)

Ô 2. Cycle de Vie d’un Widget (Stateful)


Phases du Widget (Teacher Style)

— Initialisation : createState() puis initState() (une seule fois).


— Construction : build() renvoie l’UI.
— Mise à jour : setState() provoque un nouveau build().
— Destruction : dispose() libère les ressources (fin).

8
createState() Creation de l’etat

initState() Initialisations (1 fois)

build() Affichage de l’UI

setState() Rafraichissement (Boucle)

dispose() Nettoyage / Fin

9
j Layouts : Row vs Column
La Règle d’Or (Axes)

· MainAxis : L’axe principal (Horizontal pour Row, Vertical pour Column).


· CrossAxis : L’axe secondaire (Perpendiculaire au principal).

Main Axis

Contenu A Contenu B
Contenu A
Cross Axis ! ROW " COLUMN Main Axis

Contenu B

Cross Axis

Exemple : Alignement

Row(
mainAxisAlignment: [Link], // Centre horizontalement
crossAxisAlignment: [Link], // Aligne en haut
children: [ Widget1(), Widget2() ]
)

g Container & Box Model


Le Couteau Suisse

Container : Un widget qui combine le ’painting’ (couleur, bordure), positionnement et dimensionnement.

Margin (Extérieur)
Border (Bordure)
Padding (Intérieur)

CONTENT

10
Ô Configuration : [Link]
Le Cœur de la Configuration

— C’est quoi ? Le fichier central de configuration d’un projet Flutter/Dart.


— Rôle : Il définit les métadonnées, les dépendances (packages) et les ressources (assets).
— Format : YAML (Yet Another Markup Language) → Sensible à l’indentation (2 espaces).

Que mettre dedans ?

— Dépendances : Librairies externes (ex : http, google_fonts) venant de [Link].


— Assets : Images, polices de caractères, fichiers JSON.
— Métadonnées : Nom du projet, version, description, environnement SDK.

Exemple Complet : [Link]

name : my_flutter_app # Nom du projet


description : A new Flutter project .
version : 1.0.0+1 # Version du projet

environment :
sdk : " >=2.12.0 ␣ <3.0.0 " # Version de Dart requise

dependencies : # LIBRAIRIES EXTERNES


flutter :
sdk : flutter
cupertino_icons : ^1.0.2 # Icones iOS
http : ^0.13.0 # Ex : Package pour requetes HTTP

dev_dependencies : # Outils de developpement ( tests )


flutter_test :
sdk : flutter

flutter : # CONFIGURATION SPECIFIQUE FLUTTER


uses - material - design : true # Active les icones Material

# 1. Ajout d ’ Images ( Assets )


assets :
- assets / images / # Tout le dossier
- assets / logo . png # Fichier unique

# 2. Ajout de Polices ( Fonts )


fonts :
- family : Schyler
fonts :
- asset : fonts / Schyler - Regular . ttf
- asset : fonts / Schyler - Italic . ttf
style : italic

11
i Structure du Projet & Architecture
L’Arborescence Type (Best Practices)

— lib/ : Contient tout le code Dart (l’intelligence de l’app).


— assets/ : Contient les ressources statiques (images, fonts).
— [Link] : Le chef d’orchestre (configuration).

g my_flutter_app/

g assets/

g images/

J [Link]

g lib/

D [Link] (Entrée)

g screens/

D home_screen.dart (Stateless)

D details_screen.dart (Stateful)

Ô [Link] (Config)

12
Ð Architecture Code Multi-Fichiers
1. lib/[Link] (Point d’Entrée)

import ’ package : flutter / material . dart ’; // 1. Import du SDK Flutter UI


import ’ screens / home_screen . dart ’; // 2. Import de notre ecran d ’ accueil

void main () {
runApp ( MyApp () ) ; // 3. Lancement du widget racine
}

class MyApp extends StatelessWidget {


@override
Widget build ( BuildContext context ) {
return MaterialApp ( // 4. Configuration globale de l ’ app
d e b u g S h o w C h e c k e d M o d e B a n n e r : false , // Cache le bandeau " Debug "
title : ’ Demo Architecture ’ ,
theme : ThemeData ( primarySwatch : Colors . blue ) , // Theme global
// 5. Definit quel widget afficher au demarrage
home : HomeScreen () ,
);
}
}

2. lib/screens/home_screen.dart (Stateless)

import ’ package : flutter / material . dart ’;


import ’ details_screen . dart ’; // Import de l ’ ecran cible pour la navigation

// Widget SIMPLE ( Stateless ) : Pas de variables changeantes ici


class HomeScreen extends StatelessWidget {
@override
Widget build ( BuildContext context ) {
return Scaffold (
appBar : AppBar ( title : Text ( ’ Accueil ( Menu ) ’) ) , // Barre du haut
body : Center (
child : Column (
mainAxisAlignment : MainAxisAlignment . center , // Centrage vertical
children : [
Text ( ’ Bienvenue ! ’ , style : TextStyle ( fontSize : 24) ) ,
SizedBox ( height : 20) , // Espace vide

// Bouton pour naviguer


ElevatedButton (
child : Text ( ’ Aller aux Details ’) ,
onPressed : () {
// NAVIGATION : On " mpile " la nouvelle page
Navigator . push (
context ,
// Creation de la route vers DetailsScreen
MaterialPageRoute ( builder : ( context ) = > DetailsScreen () ) ,
);
},
)
],
),
),
);
}
}

13
3. lib/screens/details_screen.dart (Stateful)

import ’ package : flutter / material . dart ’;

// Widget DYNAMIQUE ( Stateful ) : Besoin de changer l ’ UI ( compteur )


class DetailsScreen extends StatefulWidget {
@override
_ De t a il s Sc reenState createState () = > _DetailsScreenState () ;
}

class _ De t ai lsScreenState extends State < DetailsScreen > {


int _likes = 0; // variable d ’ ETAT ( qui change )

@override
Widget build ( BuildContext context ) {
return Scaffold (
appBar : AppBar ( title : Text ( ’ Details Interactifs ’) ) ,
body : Center (
child : Column (
mainAxisAlignment : MainAxisAlignment . center ,
children : [
// Affichage d ’ une image depuis les assets
Image . asset ( ’ assets / logo . png ’ , width : 150) ,
SizedBox ( height : 20) ,

// Affichage de la variable dynamique


Text ( ’ J \ ’ aime : $_likes ’ , style : TextStyle ( fontSize : 30 , fontWeight :
FontWeight . bold ) ) ,
SizedBox ( height : 20) ,

Row (
mainAxisAlignment : MainAxisAlignment . center ,
children : [
// Bouton qui modifie l ’ etat
ElevatedButton . icon (
icon : Icon ( Icons . thumb_up ) ,
label : Text ( ’ Liker ’) ,
onPressed : () {
// setState RELANCE le build () pour mettre a jour l ’ ecran
setState (() { _likes ++; }) ;
},
),
SizedBox ( width : 10) ,

// Bouton retour
OutlinedButton (
child : Text ( ’ Retour ’) ,
onPressed : () {
Navigator . pop ( context ) ; // Depile l ’ ecran ( Retour )
},
)
],
)
],
),
),
);
}
}

14

Vous aimerez peut-être aussi