2025.05.30 (Ven)

✹ RĂ©sumĂ© de Gemini 2.5 Pro  

Cours de base sur le dĂ©veloppement d’apps Flutter DevStory - Inflearn DevStory Ce n’est pas grave si vous n’avez aucune connaissance en dĂ©veloppement ! Les bases du dĂ©veloppement d’apps Flutter accessibles aux dĂ©butants đŸƒâ€â™‚ïžLes bases du dĂ©veloppement d’apps Flutter que mĂȘme les grands dĂ©butants peuvent apprendre[photo]En apprenant le dĂ©veloppement d’apps, vous pourrez publier dans le monde entier votre propre service d’app, que vous n’aviez jusque-lĂ  fait qu’imaginer. En fait

Original

naver-148-001

Cours de base sur le dĂ©veloppement d’apps Flutter DevStory - Inflearn
DevStory Ce n’est pas grave si vous n’avez aucune connaissance en dĂ©veloppement ! Les bases du dĂ©veloppement d’apps Flutter accessibles aux dĂ©butants đŸƒâ€â™‚ïžLes bases du dĂ©veloppement d’apps Flutter que mĂȘme les grands dĂ©butants peuvent apprendre[photo]En apprenant le dĂ©veloppement d’apps, vous pourrez publier dans le monde entier votre propre service d’app, que vous n’aviez jusque-lĂ  fait qu’imaginer. En fait, crĂ©er une app

www.inflearn.com

  1. Qu’est-ce que Flutter ?
  • Framework multiplateforme : dĂ©veloppĂ© par Google, il permet de dĂ©velopper des applications Android, iOS, Web et Desktop avec une seule base de code.

  • Utilise le langage Dart : l’UI s’écrit en code.

  1. Concept central : tout est widget (Widget)
  • UnitĂ© de composition de l’UI : on compose l’écran en assemblant des widgets.

  • Arbre de widgets (Widget Tree) : structure hiĂ©rarchique de widgets, composĂ©e de relations parent-enfant.

  • Key ? key et super(key: key) : dans le constructeur d’un widget, Key sert Ă  prĂ©server l’état du widget et Ă  le mettre Ă  jour efficacement lorsque l’arbre de widgets est reconstruit. À ce stade, il suffit de comprendre que ce concept existe.

  • BuildContext context : objet important qui indique la position du widget actuel dans l’arbre de widgets et permet d’accĂ©der aux donnĂ©es ou au thĂšme des widgets supĂ©rieurs. Il est utilisĂ© Ă  de nombreux endroits, comme Navigator.pop(context).

  • Principales catĂ©gories de widgets :

  • StatelessWidget : widget statique sans Ă©tat.

  • StatefulWidget : widget dynamique qui peut ĂȘtre redessinĂ© selon les changements d’état. (exemple de code omis)

  • StatefulWidget : widget dynamique qui peut ĂȘtre redessinĂ© selon les changements d’état. (exemple de code omis)

  1. Structure de base d’une app et principaux widgets
  • fonction main() & runApp() & MaterialApp & Scaffold :

  • home de MaterialApp : indique le premier Ă©cran de l’application. (ex. : home: HomePage())

  • home de MaterialApp : indique le premier Ă©cran de l’application. (ex. : home: HomePage())

  • PropriĂ©tĂ©s dĂ©taillĂ©es de l’AppBar :

  • Widgets de mise en page :

  • Column & Row :

  • Padding : ajoute de l’espace autour du widget enfant.

  • Padding : ajoute de l’espace autour du widget enfant.

  • Container : widget rectangulaire qui permet divers styles (taille, couleur, marge, bordure, etc.).

  • Container : widget rectangulaire qui permet divers styles (taille, couleur, marge, bordure, etc.).

  • Expanded : agrandit un widget enfant de Row ou Column pour remplir l’espace restant.

  • Expanded : agrandit un widget enfant de Row ou Column pour remplir l’espace restant.

  • SingleChildScrollView : permet le dĂ©filement lorsque le contenu du widget enfant dĂ©passe l’écran.

  • SingleChildScrollView : permet le dĂ©filement lorsque le contenu du widget enfant dĂ©passe l’écran.

  • ListView.builder : crĂ©e une liste dĂ©filante qui affiche efficacement un grand nombre d’élĂ©ments. Seuls les Ă©lĂ©ments visibles Ă  l’écran sont créés.

  • ListView.builder : crĂ©e une liste dĂ©filante qui affiche efficacement un grand nombre d’élĂ©ments. Seuls les Ă©lĂ©ments visibles Ă  l’écran sont créés.

  • Stack : permet de superposer des widgets (axe Z).

  • Stack : permet de superposer des widgets (axe Z).

  • AspectRatio : fixe le ratio largeur-hauteur d’un widget enfant.

  • AspectRatio : fixe le ratio largeur-hauteur d’un widget enfant.

  • double.infinity : utilisĂ© pour les propriĂ©tĂ©s width ou height d’un Container, etc., afin de remplir la taille maximale autorisĂ©e par le widget parent.

  • double.infinity : utilisĂ© pour les propriĂ©tĂ©s width ou height d’un Container, etc., afin de remplir la taille maximale autorisĂ©e par le widget parent.

  • SizedBox : utilisĂ© pour crĂ©er un espace vide d’une taille prĂ©cise ou pour dĂ©finir explicitement la taille d’un widget enfant.

  • SizedBox : utilisĂ© pour crĂ©er un espace vide d’une taille prĂ©cise ou pour dĂ©finir explicitement la taille d’un widget enfant.

  • Widgets UI de base :

  • Text & TextStyle : affiche du texte et dĂ©finit son style.

  • Image.network : charge et affiche une image depuis une URL rĂ©seau.

  • Image.network : charge et affiche une image depuis une URL rĂ©seau.

  • fit: BoxFit.cover : fait remplir Ă  l’image l’espace indiquĂ© tout en conservant ses proportions. (Si l’image est plus grande que l’espace, elle peut ĂȘtre rognĂ©e)Icon : affiche une icĂŽne Material Design.

  • fit: BoxFit.cover : fait remplir Ă  l’image l’espace indiquĂ© tout en conservant ses proportions. (Si l’image est plus grande que l’espace, elle peut ĂȘtre rognĂ©e)

  • fit: BoxFit.cover : fait remplir Ă  l’image l’espace indiquĂ© tout en conservant ses proportions. (Si l’image est plus grande que l’espace, elle peut ĂȘtre rognĂ©e)

  • Icon : affiche une icĂŽne Material Design.

  • DĂ©tails de TextField & InputDecoration : reçoit une saisie de texte de la part de l’utilisateur.

  • DĂ©tails de TextField & InputDecoration : reçoit une saisie de texte de la part de l’utilisateur.

  • ElevatedButton, TextButton, IconButton : diffĂ©rents types de widgets bouton.

  • ElevatedButton, TextButton, IconButton : diffĂ©rents types de widgets bouton.

  • Card : crĂ©e une UI en forme de carte Material Design. Elle possĂšde une lĂ©gĂšre ombre et des coins arrondis.

  • Card : crĂ©e une UI en forme de carte Material Design. Elle possĂšde une lĂ©gĂšre ombre et des coins arrondis.

  • Divider : crĂ©e une ligne de sĂ©paration visuelle.

  • Divider : crĂ©e une ligne de sĂ©paration visuelle.

  • CircleAvatar : principalement utilisĂ© pour afficher des images circulaires, comme une image de profil utilisateur.

  • CircleAvatar : principalement utilisĂ© pour afficher des images circulaires, comme une image de profil utilisateur.

  • Colors.black.withOpacity(0.5) : applique une opacitĂ© Ă  une couleur. 0.0 (complĂštement transparent) ~ 1.0 (complĂštement opaque).

  • Colors.black.withOpacity(0.5) : applique une opacitĂ© Ă  une couleur. 0.0 (complĂštement transparent) ~ 1.0 (complĂštement opaque).

  • Drawer et widgets associĂ©s :

  • Drawer : dĂ©fini dans la propriĂ©tĂ© drawer de Scaffold, c’est un panneau qui glisse depuis un cĂŽtĂ© de l’écran.

  • DrawerHeader : widget utilisĂ© pour dĂ©corer la zone supĂ©rieure d’un Drawer.

  • ListTile : souvent utilisĂ© pour composer chaque Ă©lĂ©ment Ă  l’intĂ©rieur d’un Drawer. Il possĂšde des propriĂ©tĂ©s comme leading, title, trailing et onTap.

  • ListTile : souvent utilisĂ© pour composer chaque Ă©lĂ©ment Ă  l’intĂ©rieur d’un Drawer. Il possĂšde des propriĂ©tĂ©s comme leading, title, trailing et onTap.

  • PageView : widget qui permet de consulter plusieurs pages (Ă©crans) en les faisant dĂ©filer Ă  gauche et Ă  droite. (ex. : banniĂšre d’évĂ©nement)

  1. Bases de la navigation
  • Navigator.pop(context) : utilisĂ© pour retirer l’écran actuel (route) de la pile et revenir Ă  l’écran prĂ©cĂ©dent. Utile pour fermer un Drawer ou une boĂźte de dialogue.
  1. Manipuler les données (exemple simple)
  • List<Map<String, dynamic» : composer les donnĂ©es utilisĂ©es dans ListView.builder, etc., avec des listes et des maps Dart est une mĂ©thode courante. Chaque Map contient les informations d’un Ă©lĂ©ment, et on accĂšde aux valeurs avec des clĂ©s String.
  1. Structure de projet et environnement de développement
  • Dossier lib : endroit oĂč l’on Ă©crit principalement le code Dart. main.dart est le fichier de dĂ©marrage par dĂ©faut.

  • Fichier pubspec.yaml : fichier qui configure les mĂ©tadonnĂ©es du projet, la gestion des dĂ©pendances (bibliothĂšques/packages), la version du SDK, etc.

naver-148-002

  • VSCode : utilisĂ© comme principal outil de dĂ©veloppement.

  • Command Palette (Ctrl+Shift+P / Cmd+Shift+P) : exĂ©cute diverses commandes Flutter comme Flutter: New Project, Flutter: Launch Emulator, etc.

naver-148-003

  • Raccourcis utiles : il est indispensable d’apprendre des raccourcis utiles comme l’autocomplĂ©tion (Ctrl+Space/Option+Esc), le refactoring (Ctrl+Shift+R), l’affichage des paramĂštres (Ctrl+Option), etc. ! (pour amĂ©liorer la productivitĂ©)

  • Plus tard, je prĂ©vois de faire beaucoup de courts articles centrĂ©s sur les raccourcis VSCode.

  • ex) Comment activer le Presentation Mode dans VSCode

naver-148-004

  • Emulator : appareil mobile virtuel, utilisĂ© pour tester une app sans appareil rĂ©el.

naver-148-005

naver-148-006

  • Hot Reload : reflĂšte rapidement les changements de code Ă  l’écran tout en conservant en grande partie l’état de l’app. (icĂŽne en forme d’éclair)

  • Hot Restart : rĂ©initialise l’état de l’app et redĂ©marre l’app. (icĂŽne en forme de cercle)

naver-148-007

  • analysis_options.yaml : fichier qui dĂ©finit les rĂšgles d’analyse du code Dart. (ex. : activation/dĂ©sactivation de certaines rĂšgles de lint)

  • Par exemple, si vous essayez d’utiliser la fonction print pour afficher du texte dans la Debug Console, il fait tout un scandale en disant qu’il ne faut pas l’utiliser en production.

naver-148-008

  • Comme il suffira de l’enlever en production, essayons de retirer ‘avoid_print’ des rĂšgles de lint. Solution 1. Écrire un commentaire ignore_for_file en haut du fichier dart concernĂ©.

naver-148-009

  • Comme il suffira de l’enlever en production, essayons de retirer ‘avoid_print’ des rĂšgles de lint.

  • Solution 1. Écrire un commentaire ignore_for_file en haut du fichier dart concernĂ©.

  • Solution 2. Le traiter comme ignorĂ© dans analysis_options.yaml Ă  la racine du projet.

naver-148-010

  • Solution 2. Le traiter comme ignorĂ© dans analysis_options.yaml Ă  la racine du projet.

  • Solution 2. Le traiter comme ignorĂ© dans analysis_options.yaml Ă  la racine du projet.

  1. MĂ©thode d’apprentissage de Flutter
  • Widget Catalog & Widget of the week : apprendre divers widgets avec le catalogue de widgets de la documentation officielle Flutter et la sĂ©rie ‘Widget of the week’.

  • Utiliser les communautĂ©s : poser des questions, rĂ©pondre et progresser ensemble dans les communautĂ©s liĂ©es Ă  Flutter (forums en ligne, chats ouverts, etc.).

  • Bien connaĂźtre la syntaxe Dart : comme Flutter utilise le langage Dart, il est important de bien comprendre la syntaxe Dart.

💭 Journal

J’avais dĂ©jĂ  manipulĂ© C, C++, Java, Javascript, Python, 
 d’innombrables langages, et aussi divers frameworks/outils comme Spring, Vue.js, Django et FlutterFlow. MalgrĂ© cela, je me suis demandĂ© s’il n’y avait pas des concepts de base que j’avais laissĂ©s passer, alors j’ai commencĂ© par un cours sur les bases de Flutter.

Je pensais que c’étaient des concepts que je connaissais dĂ©jĂ  et j’ai essayĂ© de passer rapidement dessus, mais waouh, j’avais peut-ĂȘtre vraiment lĂąchĂ© le dĂ©veloppement depuis trop longtemps. Peut-ĂȘtre que mes muscles cĂ©rĂ©braux s’étaient raidis ; je n’arrivais pas Ă  imaginer rapidement dans ma tĂȘte comment Ă©crire le code.

Maintenant, nous sommes Ă  une Ă©poque oĂč, dans VSCode, on peut coder efficacement avec l’aide d’IA comme Inline Chat(Gemini 2.5 Pro) ou Code Recommendation(GitHub Copilot), poser rapidement ses questions, trouver des rĂ©ponses et utiliser l’autocomplĂ©tion. J’espĂšre donc pouvoir restaurer plus vite mes muscles de cerveau de codeur.

Il y a encore beaucoup de chemin ! C’est parti !

Laisser un commentaire