main.dart, puis nous explorerons la fonction main(), le rôle de runApp(), et enfin nous afficherons notre premier widget à l'écran. Chaque étape sera expliquée en détail, avec du code minimal et épuré.
2.2Comprendre la structure minimale d'une application Flutter
2.2.1 – Le fichier main.dart
Avant de commencer à écrire du code Flutter, il est essentiel de comprendre où se trouve le point de départ de votre application. Dans Flutter, ce point de départ est toujours le fichier main.dart.
📁 Rôle du fichier main.dart
Le fichier main.dart est le point d'entrée de votre application Flutter. C'est le premier fichier que Flutter lit et exécute quand vous lancez votre application. Sans ce fichier, votre application ne peut pas démarrer.
main.dart est comme la première page du livre. C'est là que l'histoire commence. De la même manière, main.dart est l'endroit où votre application Flutter commence son histoire. 📖
📍 Emplacement dans le projet
Quand vous créez un nouveau projet Flutter (avec la commande flutter create ou depuis votre éditeur), Flutter crée automatiquement une structure de dossiers. Le fichier main.dart se trouve toujours au même endroit :
mon_projet_flutter/
├── lib/
│ └── main.dart ← C'est ici !
├── android/
├── ios/
└── ... (autres dossiers)
Le fichier main.dart est toujours dans le dossier lib/ (qui signifie "library", bibliothèque en anglais). C'est dans ce dossier que vous placerez la majorité de votre code Dart.
En programmation, une "library" (bibliothèque) est un ensemble de code organisé. Le dossier
lib/ contient tout le code source de votre application. C'est une convention standard en Dart et Flutter.
🔗 Lien avec l'exécution
Quand vous lancez votre application Flutter (en appuyant sur le bouton "Run" dans votre éditeur ou en exécutant flutter run), voici ce qui se passe :
- Flutter cherche le fichier
lib/main.dart - Flutter lit ce fichier de haut en bas
- Flutter exécute la fonction
main()qui se trouve dans ce fichier - Votre application démarre !
Le fichier
main.dart doit obligatoirement contenir une fonction appelée main(). Sans cette fonction, Flutter ne saura pas par où commencer et votre application ne pourra pas démarrer. Nous verrons cette fonction en détail dans la prochaine section.
👀 À quoi ressemble un fichier main.dart vide ?
Quand vous créez un nouveau projet Flutter, le fichier main.dart contient déjà du code. Pour l'instant, ne vous préoccupez pas de ce code. Dans cette section, nous allons créer notre propre version très simple, étape par étape.
Avant de continuer, ouvrez votre projet Flutter dans votre éditeur et localisez le fichier
lib/main.dart. Regardez son contenu actuel, mais ne vous inquiétez pas s'il semble complexe. Nous allons tout reconstruire ensemble, de manière très simple.
💡 Points clés à retenir
- Le fichier
main.dartest le point d'entrée de votre application - Il se trouve toujours dans le dossier
lib/ - Flutter lit ce fichier en premier quand vous lancez l'application
- Ce fichier doit contenir une fonction
main()
2.2.2 – La fonction main()
Maintenant que vous savez où se trouve le fichier main.dart, découvrons ce qu'il doit contenir. La fonction main() est le point de départ de l'exécution de votre application. C'est ici que tout commence.
🎯 Point d'entrée obligatoire
En Dart (le langage utilisé par Flutter), la fonction main() est obligatoire. C'est la première fonction que Dart exécute quand vous lancez votre programme. Sans elle, votre code ne peut pas s'exécuter.
Le nom "main" signifie "principal" en anglais. C'est la fonction principale de votre programme. C'est une convention universelle en programmation : presque tous les langages de programmation utilisent une fonction
main() comme point d'entrée.
📝 Structure minimale
La fonction main() a une structure très simple. Voici sa forme la plus basique :
void main() {
}
Analysons ce code ligne par ligne :
void: Ce mot-clé signifie "vide" ou "rien". Il indique que la fonctionmain()ne retourne aucune valeur. C'est toujours le cas pourmain()en Dart.main: C'est le nom de la fonction. Il doit être exactement "main", en minuscules.(): Les parenthèses indiquent que c'est une fonction. Pour l'instant, elles sont vides (pas de paramètres).{ }: Les accolades délimitent le corps de la fonction. C'est entre ces accolades que vous écrirez votre code.
Le nom de la fonction doit être exactement
main, en minuscules. Si vous écrivez Main() ou MAIN(), Dart ne le reconnaîtra pas comme point d'entrée et votre application ne démarrera pas.
🧪 Test simple : afficher un message
Pour vérifier que notre fonction main() fonctionne, ajoutons une simple instruction pour afficher un message dans la console. Nous utiliserons la fonction print() que vous connaissez déjà du chapitre 1.2.
void main() {
print('Mon application Flutter démarre !');
}
Ce code affiche le message "Mon application Flutter démarre !" dans la console quand l'application démarre. C'est un bon moyen de vérifier que la fonction main() est bien exécutée.
Quand vous lancez votre application Flutter, le message s'affiche dans la console de votre éditeur (le panneau en bas qui affiche les logs). Cherchez une zone appelée "Debug Console" ou "Terminal" dans votre éditeur.
🚀 Exemple avec runApp()
Afficher un message dans la console, c'est bien, mais ce n'est pas ce que nous voulons. Nous voulons afficher quelque chose à l'écran de notre application ! Pour cela, nous devons utiliser une fonction spéciale appelée runApp().
Voici comment utiliser runApp() dans la fonction main() :
void main() {
runApp();
}
Pour l'instant, nous appelons simplement runApp() sans rien lui donner. Mais cette fonction a besoin d'un paramètre pour savoir quoi afficher. Nous découvrirons ce paramètre dans la prochaine section.
Si vous essayez d'exécuter ce code maintenant, vous obtiendrez une erreur. C'est normal ! La fonction
runApp() nécessite un paramètre. Nous allons voir comment l'utiliser correctement dans la section suivante. Pour l'instant, retenez simplement que runApp() est la fonction qui démarre votre application Flutter.
La fonction
runApp() est fournie par Flutter. Elle initialise le framework Flutter et prépare l'application pour l'affichage. C'est elle qui transforme votre code Dart en une interface visible à l'écran. Sans runApp(), votre application ne peut pas afficher d'interface utilisateur.
💡 Points clés à retenir
- La fonction
main()est obligatoire et est le point d'entrée de votre application - Elle doit s'appeler exactement
main(en minuscules) - Elle commence toujours par
void main() { } - La fonction
runApp()démarre l'application Flutter runApp()doit être appelée dansmain()pour que l'application fonctionne
Voici la structure minimale que nous avons vue jusqu'à présent :
void main() {
runApp();
}
Dans la prochaine section, nous allons voir ce que nous devons mettre entre les parenthèses de runApp().
2.2.3 – Le rôle de runApp()
Dans la section précédente, nous avons vu que runApp() est nécessaire pour démarrer une application Flutter. Mais cette fonction ne fonctionne pas toute seule. Elle a besoin de savoir quoi afficher. C'est ce que nous allons découvrir maintenant.
🔧 Initialisation de Flutter
Quand vous appelez runApp(), Flutter fait plusieurs choses importantes :
- Flutter initialise son moteur de rendu (le système qui dessine à l'écran)
- Flutter prépare l'interface utilisateur
- Flutter attend de savoir quoi afficher
C'est pourquoi runApp() a besoin d'un paramètre : elle doit savoir quel élément afficher à l'écran.
Imaginez que vous allumez votre téléviseur. L'écran s'allume (c'est l'initialisation de Flutter), mais il est noir car il ne sait pas encore quoi afficher. Vous devez lui dire quelle chaîne regarder (c'est le paramètre de
runApp()). 📺
🌳 Le widget racine
Le paramètre que vous donnez à runApp() s'appelle le widget racine. Un widget est un élément d'interface utilisateur en Flutter. Nous allons découvrir les widgets en détail dans les prochains chapitres, mais pour l'instant, sachez simplement qu'un widget est quelque chose qui peut être affiché à l'écran.
Le widget racine est le premier widget que Flutter affiche. C'est la base de toute votre interface. Tous les autres éléments de votre application seront des enfants de ce widget racine.
Pour l'instant, pensez simplement qu'un widget est un élément que vous pouvez afficher à l'écran : du texte, un bouton, une image, etc. Nous explorerons les widgets en détail plus tard. Pour cette section, nous utiliserons uniquement le widget le plus simple :
Text(), qui affiche du texte.
📝 Syntaxe de runApp()
Voici comment utiliser runApp() avec un widget :
void main() {
runApp(Directionality(
textDirection: TextDirection.ltr,
child: Text('Bonjour Flutter !'),
));
}
Analysons ce code :
runApp(: Nous appelons la fonctionrunApp()Directionality(: C'est un widget qui indique la direction du texte (de gauche à droite pour le français). Flutter en a besoin pour afficher correctement le texte.textDirection: TextDirection.ltr: Indique que le texte va de gauche à droite (ltr = left to right)child: Text('Bonjour Flutter !'): Le widgetText()est l'enfant deDirectionality. C'est lui qui affiche le texte.): Nous fermons l'appel àrunApp()
Flutter a besoin de savoir dans quelle direction afficher le texte (gauche à droite pour le français, droite à gauche pour l'arabe, etc.). Le widget
Directionality fournit cette information. C'est une contrainte technique de Flutter : Text() doit être dans un contexte qui définit la direction du texte.Qu'est-ce que Text() ?
Text() est un widget Flutter très simple qui affiche du texte à l'écran. Il prend en paramètre une chaîne de caractères (le texte à afficher) entre guillemets. Ici, il est l'enfant de Directionality.
🧪 Exemple minimal avec Text()
Voici le code complet le plus simple possible pour une application Flutter :
import 'package:flutter/material.dart';
void main() {
runApp(Directionality(
textDirection: TextDirection.ltr,
child: Text('Bonjour Flutter !'),
));
}
Ce code :
- Importe les widgets Flutter nécessaires
- Définit la fonction
main()(point d'entrée) - Appelle
runApp()pour démarrer Flutter - Donne à
runApp()un widgetDirectionalityqui contient un widgetText()affichant "Bonjour Flutter !"
Flutter nécessite un contexte de direction pour afficher du texte. Le widget
Directionality fournit ce contexte. Sans lui, vous obtiendrez une erreur. C'est une contrainte technique de Flutter que nous devons respecter.Note : Dans les prochains chapitres, nous utiliserons
MaterialApp qui fournit automatiquement ce contexte. Pour l'instant, nous utilisons Directionality pour rester minimal et comprendre les bases.
▶️ Tester le code
Maintenant, testez ce code dans votre projet Flutter :
- Ouvrez le fichier
lib/main.dart - Remplacez tout le contenu par le code ci-dessus (avec l'import)
- Lancez votre application (bouton "Run" ou
flutter run)
Directionality et Text() dans une application Flutter minimale.Vous devriez voir le texte "Bonjour Flutter !" affiché à l'écran de votre application. Le texte sera probablement petit et positionné en haut à gauche de l'écran. C'est normal ! Nous apprendrons à le centrer et à le rendre plus grand dans les prochaines sections.
Assurez-vous d'avoir bien ajouté la ligne
import 'package:flutter/material.dart'; en haut du fichier. Sans cette ligne, Flutter ne connaît pas Text() et runApp().
💡 Points clés à retenir
runApp()initialise Flutter et démarre l'applicationrunApp()a besoin d'un paramètre : le widget racine- Le widget racine est le premier élément affiché à l'écran
Text()est un widget simple qui affiche du texte- L'import
import 'package:flutter/material.dart';est nécessaire pour utiliser les widgets Flutter
Voici la structure minimale complète d'une application Flutter :
import 'package:flutter/material.dart';
void main() {
runApp(Directionality(
textDirection: TextDirection.ltr,
child: Text('Bonjour Flutter !'),
));
}
C'est le code le plus simple possible pour afficher quelque chose à l'écran avec Flutter. Directionality fournit le contexte nécessaire, et Text() affiche le texte.
Vous avez maintenant créé votre première application Flutter ! C'est un grand pas. Vous comprenez :
- Où se trouve le fichier
main.dart - Comment fonctionne la fonction
main() - Le rôle de
runApp() - Comment utiliser
Directionalitypour fournir le contexte de direction - Comment afficher un widget simple (
Text())
Vous avez appris :
- ✅ Le fichier
main.dartest le point d'entrée de votre application - ✅ La fonction
main()est obligatoire et est le point de départ de l'exécution - ✅
runApp()démarre Flutter et nécessite un widget racine - ✅
Directionalityest nécessaire pour fournir le contexte de direction - ✅
Text()est un widget simple pour afficher du texte - ✅ Les widgets sont organisés en arbre
MaterialApp et apprendre à créer des interfaces plus structurées avec Scaffold et d'autres widgets de base. À bientôt ! 🚀