Guide complet Flutter : Le widget Container


Avatar de Pierre Courtois

Le Container est probablement le widget le plus basique que vous pouvez rencontrer dans Flutter. Celui-ci va vous servir à définir les zones dans lesquels vous allez placer les différents éléments de votre application. Dans cet article je vous apprends à leur donner des propriétés de base, mais aussi à les rendre ronds ou penchés. 


À quoi sert un Container dans Flutter ? 

Pour le décrire simplement, un Container est un espace rectangulaire auquel vous allez donner une hauteur et une largeur. C’est un widget de base auquel vous allez également pouvoir donner une couleur et une bordure à cet espace, ainsi qu’y placer un autre widget comme un icon, un bouton, du texte, etc. Les Containers sont donc un widget central dans la définition des différents éléments qui vont composer votre application.

Je vous partage ici une vidéo de la documentation officielle de Flutter, vous permettant de comprendre de manière illustrée à quoi servent les Containers : 

Il existe aussi un widget AnimatedContainer, ayant plus ou moins les mêmes propriétés, mais pouvant changer de taille, de forme, de couleur, etc pour créer des animations dynamiques dans votre application.

Comment donner une taille, une couleur et une marge à mon Container ?

Les trois paramètres principaux que vous allez probablement vouloir donner à votre Container, vont être : 

  • Une taille (hauteur et largeur) ; 
  • Une couleur ; 
  • Une marge ou un padding (marge intérieure).

Donner une taille à un Container 

Vous allez pouvoir définir la taille d’un Container grâce aux propriétés heigth (hauteur), et width (largeur). Ces deux propriétés peuvent prendre une valeur absolue (en nombre de pixels), ou bien relative (Selon la taille de l’écran ou d’un autre élément). Voici un exemple tout simple d’un Container de 50 pixels sur 50 pixels, placé au centre de son parent  : 

Center(
  child: Container(
    width: 50,
    height: 50,
  ),
)

Même si ce n’est pas obligatoire, je vous conseille de toujours donner une taille à vos Containers. En effet, celui-ci va prendre la taille du widget qu’il contient si vous ne la définissez pas. Or, certains widgets comme Column ou Row, prennent une taille infinie si les valeurs height et width du Container qui les contient ne sont pas définies, ce qui abouti à une erreur.

Donner une couleur à un Container 

Vous pouvez donner une couleur à votre Container en lui ajoutant une propriété color (Couleur). Il existe trois méthodes pour définir cette valeur : 

  • Colors.xxx . Couleurs de bases de la palette Flutter ; 
  • Color.fromARGB(a, r, g, b) . Ici, les valeurs doivent être remplacées par des nombres compris entre 0 et 255. La lettre a représente l’opacité, r la couleur rouge, g pour le vert et b pour le bleu ; 
  • Color.fromRGBO(r, g, b, opacity) . Même chose que pour ARGB, mais ici l’opacité va prendre une valeur comprise entre 0 et 1

Voici un exemple de comment donner une couleur à notre Container de 50 pixels : 

Center(
  child: Container(
    width: 50,
    height: 50,
    color: Colors.greenAccent,
  ),
)

Il y a bien d’autres méthodes pour ajouter de la couleur à un Container, mais je vous montre ici les plus simples.

Donner une marge et un padding à un Container

La marge va vous permettre de créer de l’espace entre le Container et ce qui l’entoure. Le padding quant à lui, va ajouter de l’espace entre les bords du Container et le widget enfant qu’il contient. Ces deux valeurs peuvent être définies très simplement grâce à l’une des méthodes qui suivent : 

  • EdgeInsets.all() -> Permet d’ajouter une même marge ou un même padding à tous les côtés ; 
  • EdgeInsets.symmetric() -> Permet d’ajouter une marge ou un padding haut – bas ou droite – gauche ; 
  • EdgeInsets.only() ->Permet d’ajouter une marge ou un padding différent pour chaque côté.

Il y a bien d’autres méthodes pour ajouter une marge ou un padding à un Container, mais je vous montre ici les plus simples.

Comme pour width et heigth, ces deux propriétés peuvent prendre une valeur absolue (en pixel), ou bien relative (à l’écran ou un autre élément). Voici donc un exemple tout simple de comment ajouter une marge et un padding à mon Container : 

Center(
  child: Container(
    width: 50,
    height: 50,
    color: Colors.greenAccent,
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

Ici, j’ai ajouté une marge de 10 pixel en haut et en bas de mon Container, ainsi qu’un padding de 5 pixel en bas.

Comment donner un bord à mon Container dans Flutter ?

Une question souvent posée est comment donner un bord à un Container dans Flutter. Vous allez cette fois-ci devoir utiliser la propriété décoration, à laquelle vous allez donner un widget BoxDecoration. Celui-ci contient lui-même une propriété border, à laquelle vous allez donner une valeur de Border.all(), qui va prendre comme argument la taille de votre bordure, ainsi que sa couleur. Voici ce que cela donne, une fois codé : 

Center(
  child: Container(
    width: 50,
    height: 50,
    decoration: BoxDecoration(
                        border: Border.all(width: 2, color: Colors.black),
                        color: Colors.greenAccent,
    ),
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

Dès lors que vous ajoutez une propriété decoration à votre Container, la couleur doit être placée dans le widget BoxDecoration. Si vous ne le faites pas, votre application va planter et vous aurez un message d’erreur.

Comment faire un Container arrondi ou rond dans Flutter ?

Donner une forme ronde à votre Container n’est pas si compliqué qu’il n’y parait. Pour cela, vous aurez encore besoin de la BoxDecoration à laquelle vous allez cette fois-ci ajouter une propriété borderRadius, qui va prendre comme argument BorderRadius.circular(radius). Ici, radius doit être remplacé par une valeur numérique absolue ou relative. Plus la valeur sera élevée, plus vos bords seront arrondis, jusqu’à ce que votre Container devienne complètement rond : 

Center(
  child: Container(
    width: 50,
    height: 50,
    decoration: BoxDecoration(
                        border: Border.all(width: 2, color: Colors.black),
		borderRadius : Border.circular(5),
                        color: Colors.greenAccent,
    ),
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

Comment faire un Container penché ?

Pour finir, vous vous demandez peut être comment changer l’orientation d’un Container ? Par exemple, comment faire pour avoir un Container en forme de losange ? Tout simplement en utilisant cette fois-ci la propriété transfrom, qui va prendre comme argument la méthode Matrix4.rotationZ(radiant). Radiant prend une valeur allant de 0 à 1, comme dans l’exemple ci-dessous : 

Center(
  child: Container(
    width: 50,
    height: 50,
    decoration: BoxDecoration(
                        border: Border.all(width: 2, color: Colors.black),
                        color: Colors.greenAccent,
    ),
    transform: Matrix4.rotationZ(0.1),
    margin: EdgeInsets.symmetric(vertical: 10),
    padding: EdgeInsets.only(bottom: 5),
  ),
)

Conclusion

Maintenant que vous connaissez les widgets Scaffold et Container, vous êtes en mesure de commencer à placer les premiers éléments de votre application. Toutefois, comment les positionner exactement à l’endroit où vous le souhaitez ? Je vous en dis davantage dans ces deux articles :

Guide complet Flutter : Le widget Column

Guide complet Flutter : Le widget Row

Avatar de Pierre Courtois