TP1 Flutter
TP1 Flutter
TP1 Flutter
Plus de configurations
- Si vous utilisez un émulateur, veuillez alors le paramétrer comme indiquer
dans l’annexe du TP1
- Si vous avez des problèmes avec l’utilisation d’un appareil physique ou virtuel
pour tester, utiliser alors le navigateur chrome. Il suffit d’exécuter dans la
CMD la commande flutter config –enable-web
- Lorsque vous copiez et coller du code dans votre application, les retraits de
ligne peuvent présenter un décalage, pour le corriger effectuez un clic droit
sur le code Dart et sélectionnez Reformat Code with dartfmt (Reformater le
code avec dartfmt).
Help
Voir la documentation en ligne de Flutter (https://docs.flutter.dev/ )
Accéder au document Aide Mémoire Widgets Flutter
Rappel
Flutter est un Framework basé sur Dart, il crée ses interfaces graphiques (ou Widgets) par
composition de plusieurs Widgets sous la forme d’un arbre. Chaque Widget est un objet créé par
l’intermédiaire d’un constructeur avec arguments nommés.
Page 1 sur 9
Développement Mobile LGLSI 3
Exercice 1 : MaterialApp
Avant de créer toute interface graphique en Flutter, vous devez obligatoirement choisir le style
à adopter : Material Design (pour Android) ou Cuppertino Design (pour iOS). Dans nos TP,
nous allons adopter le style Material Design. Ainsi, les interfaces graphiques à créer doivent
adopter ce style par utilisation du Widget MaterialApp et les autres widgets relatifs à ce
design. Vous devez inclure ainsi la bibliothèque correspondante dans votre code source :
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
NB
● la fonction main lance l’exécution de votre application en appelant la fonction runApp
● runApp( …. ) prend en argument un objet Correspondant au Widget à créer (il peut être un
Widget prédéfinit ou un widget que vous créez)
3. Exécuter le code obtenu, remarquez que vous obtenez une fenêtre noire. Vous devez alors
configurer MaterialApp afin d’avoir l’interface que vous souhaiterez.
Pour exécuter le code obtenu, veuillez lancer d’abord un émulateur ou sélectionner un appareil
physique réel puis lancer l’exécution :
Page 2 sur 9
Développement Mobile LGLSI 3
Agenda :
(a) Sélection d’un émulateur ou d’un appareil réel. (b)Si aucun appareil n’apparaît,
cliquez sur rafraîchir ou bien sur (f) qui est le Device Manager. Ce dernier vous
permet de créer un appareil virtuel.
(c) sélectionner le fichier contenant la fonction main() qui lance l’exécution de
l’application
(d) bouton d’exécution
(e) bouton de Hot Reload
4. Nous allons maintenant paramétrer MaterialApp. Il suffit de remplacer MaterialApp() par le code
suivant :
MaterialApp(
debugShowCheckedModeBanner: false, //désactiver étiquette de debug
title: 'EX1 TP2 Flutter', //titre de l’application
home: //contiendra la première interface qui sera lancée
Text('EX1 Flutter') //Afficher un texte
)
Page 3 sur 9
Développement Mobile LGLSI 3
5. Afin de modifier le thème des couleurs de votre application, veuillez ajouter la propriété theme
à votre MaterialApp comme dans cet exemple :
theme : ThemeData( primarySwatch: Colors.amber)
Exercice 2 : Scaffold
Afin d’améliorer notre affichage, nous allons intégrer notre texte au sein du widget Scaffold.
Scaffold : est un Widget issu de la bibliothèque Material, fournit une barre
d'application par défaut, un titre et un corps qui contient l'arborescence de widgets
de l'écran d'accueil
Center : un Widget permet de centrer son Widget fils
Code Affichage
home:
Scaffold(
body: Center(child:Text('EX1 Flutter'))
)
2. Ajouter un peu de style à votre text : remplacer alors Text('EX1 Flutter') par :
Text('EX1 Flutter',
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold)
)
)
3. Nous allons maintenant configurer la barre de l’application à travers le widget Scaffold afin
d’obtenir l’apparence suivante :
Vous devez alors rajouter l’attribut appBar à Scaffold et le paramétrer comme demandé :
Scaffold(
appBar: AppBar(
title: Text('Barre'),
leading: Icon(Icons.arrow_back_sharp),
actions: [
Icon(Icons.add_shopping_cart),
Icon(Icons.email),
Icon(Icons.phone)
]),
body: Center(
child: Text(
'EX1 Flutter',
style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold),
)) //Afficher un texte,
)
Exercice 3 : Image
À la place du texte, nous allons afficher une image locale au projet.
1. Créer un nouveau dossier : click droit sur le nom du projet -- New – Directory puis l’appeler
« images »
2. Y ajouter une image de votre choix, par exemple l’image «pokemon.jpg»
3. Ouvrir le fichier « pubspec.yaml » et # assets:
# - images/a_dot_burr.jpeg
chercher le bout de code contenant # - images/a_dot_ham.jpeg
Page 5 sur 9
Développement Mobile LGLSI 3
body:Center(child: Image.asset('images/pokemon.jpg'))
Maintenant nous voulons afficher du texte « Favorite Cartoon » avant l’image. Pour atteindre cet
objectif nous devons utiliser le Widget Column qui acceptera plusieurs Widgets à positionner
verticalement.
Code Résultat
body:
Column(
children:[
Text('FavoriteCartoon'),
Image.asset("images/pokemon.jpg")
]
)
Page 6 sur 9
Développement Mobile LGLSI 3
Pour ajouter un peu de style au text Favorite Cartoons ( padding, margin, …), utilisez le widget
Container et y inclure le widget Text à styler.
Text("Favorite Cartoon")
Remplacé par
Container(
child: Text('Favorite Cartoons',
style:
TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
padding: EdgeInsets.all(20),
margin: EdgeInsets.all(30),
decoration: new BoxDecoration(
color: Colors.grey.shade200,
borderRadius: BorderRadius.all(
Radius.circular(5))
)
), //fin Container
Pour afficher la colonne Centré, nous allons l’intégrer dans un Widget Center.
Structure générale du code Résultat
body:
Center(child:Column(children:
[….]
))
Notre code devient de plus en plus complexe. Nous allons avoir recours donc à
le séparer dans divers fichiers.
1) Créer sous le dossier « lib » un nouveau fichier dart que vous appelez « FirstUI ».
2) Déplacer la classe « FirstUI» du fichier « main.dart » vers le fichier « FirstUI» et ne pas
oublier d’ajouter import 'package:flutter/material.dart'; au début du fichier
3) Dans le fichier « main.dart » ajouter l’import de cette class
Page 7 sur 9
Développement Mobile LGLSI 3
Image.asset("images/pokemon.jpg")
,
Row(
//diviser l'espace vide dans la ligne entre les boutons
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
//code pour le premier bouton
ElevatedButton(onPressed:() {}, child: Text('Sign Up')),
//code pour le deuxième bouton
ElevatedButton(onPressed:() {}, child: Text('Sign In'))
]
)
]))
Card : c’est un Widget utilisé pour représenter toutes les informations similaires dans un seul bloc.
Lors de la conception d'une carte, nous pouvons utiliser des éléments tels que du texte, des images,
des vidéos, des boutons de texte, etc.
Le lien [https://codesinsider.com/flutter-card-example-tutorial/ ] pourra vous aider.
Travail : Créer un nouveau fichier dart
« ThirdUI » et y inclure le code suivant pour
créer une simple Carte que vous devez la
terminer pour avoir l’apparence suivante
Page 8 sur 9
Développement Mobile LGLSI 3
import 'package:flutter/material.dart';
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround ,
children: [
// Code à terminer
],
)
)
),
);
}
}
Questions
1/ Quel Widget devez-vous utiliser afin de pouvoir placer des éléments sur une même ligne ?
2/ Qu’est ce que vous devez utiliser pour ajouter une mise en forme complexe (du padding, margin
et couleur ..) à un Widget.
Page 9 sur 9