Le widget Stack de Flutter pour superposer des objets

Le widget Stack permet de superposer un widget sur un autre. Donc, nous ne pouvons pas utiliser des lignes et des colonnes. Par conséquent, vous pouvez afficher du texte sur une image en utilisant le widget stack dans les applications Flutter.

Le widget stack nous permet d’afficher plusieurs couches de widgets à l’écran. Il est également à multiples widgets enfants, ce qui signifie qu’il possède une propriété children. L’ordre des couches de widgets de bas en haut , donc le premier widget sera en bas et vice versa, le dernier widget sera en haut.

Le constructeur de la classe Stack() accepte différentes propriétés.

Le widget Stack – positionned

Les éléments positionnés sont encapsulés dans le widget Positionned et doivent avoir un attribut non nul.

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Stack | Positioned'),
        ),
        body: Stack(
          children: <Widget>[
            Container(
              width: 400,
              height: 400,
              color: Colors.green[500],
              child: Center(
                child: Text(
                  'Green',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
            Container(
              width: 250,
              height: 150,
              color: Colors.cyan[400],
              child: Center(
                child: Text(
                  ' Cyan',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
            Container(
              width: 100,
              height: 100,
              color: Colors.indigo[300],
              child: Center(
                child: Text(
                  'Indigo',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
          ],
        ));
  }
}
widget Stack

Comme vous pouvez le constater dans l’exemple, le vert est le premier widget enfant, il est donc en bas. Cependant le conteneur de couleur indigo est en haut, et le cyan est au milieu.

En fait, l’utilisation du widget Positioned avec le widget stack permet de positionner le widget enfant.

Si vous souhaitez que le widget soit placé dans le coin inférieur droit, utilisez ce code :

Positioned(right: 0, bottom: 0, child: Text("Bottom right"))

Par exemple right:10 , signifie qu’il a une position 10 du côté droit.

Les propriétés du widget Stack

Voici les propriétés que vous pouvez utiliser avec le widget Stack.

textDirection

Il détermine la direction du texte. Il peut être du texte ltr (de gauche à droite) ou rtl (de droite à gauche).

Stack(  
  textDirection: TextDirection.rtl,  
  children: <Widget>[ ]  
) 

Le widget Stack – alignement

Chaque élément de l’objet Stack est soit positionné ou non positionné. Stack lui-même contient tous les sous-composants qui ne sont pas positionnés. Les sous-composants sont positionnés en fonction de la propriété d’alignement (la valeur par défaut est le coin supérieur gauche).

body: Stack(
          alignment: Alignment.topRight,
          children: <Widget>[ ] 
)

La propriété fit

Contrôle la taille des widgets qui ne sont pas positionnés dans Stack. Il en existe trois types : loose, expand and passthrough. L’attribut loose est utilisé pour placer le petit widget, la propriété expand rend le widget aussi grand que possible et passthrough définit le widget en fonction de son widget.

La propriété overflow

Contrôle les widgets enfants, s’ils sont visibles ou tronqués, lorsque le contenu déborde en dehors du Stack.

Stack(  
  overflow: Overflow.clip,
  children: <Widget>[ ]  
)  

Prenons un autre exemple et essayons d’appliquer certaines propriétés essentielles du widget Stack.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

/// le Widget principal de l'application
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyStackWidget(),
    );
  }
}

class MyStackWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text("Le Widget Stack"),
          ),
          body: Center(
            child: Stack(
              fit: StackFit.passthrough,
              overflow: Overflow.visible,
              children: <Widget>[
                // Le plus grand widget
                Container(
                  height: 300,
                  width: 400,
                  color: Colors.green,
                  child: Center(
                    child: Text(
                      'Vert',
                      style: TextStyle(color: Colors.white, fontSize: 20),
                    ),
                  ),
                ),
                Positioned(
                  top: 30,
                  right: 20,
                  child: Container(
                    height: 100,
                    width: 150,
                    color: Colors.blue,
                    child: Center(
                      child: Text(
                        'Bleu',
                        style: TextStyle(color: Colors.white, fontSize: 20),
                      ),
                    ),
                  ),
                ),
                Positioned(
                    top: 30,
                    left: 20,
                    child: Container(
                      height: 100,
                      width: 150,
                      color: Colors.orange,
                      child: Center(
                        child: Text(
                          'Orange',
                          style: TextStyle(color: Colors.white, fontSize: 20),
                        ),
                      ),
                    )),
              ],
            ),
          )),
    );
  }
}
widget Stack

Le widget IndexedStack

Le widget IndexedStack ne peut afficher qu’un seul widget de la pile. Nous pouvons spécifier un index donné à partir de plusieurs widgets. La position de l’index commence à partir de 0 zéro. Si nous augmentons l’index, il chargera le widget suivant en fonction de l’index donné.

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('IndexedStack'),
        ),
        body: IndexedStack(
          index: 1,
          children: <Widget>[
            Container(
              width: 400,
              height: 400,
              color: Colors.green[500],
              child: Center(
                child: Text(
                  'Green',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
            Container(
              width: 250,
              height: 150,
              color: Colors.cyan[400],
              child: Center(
                child: Text(
                  ' Cyan',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
            Container(
              width: 100,
              height: 100,
              color: Colors.indigo[300],
              child: Center(
                child: Text(
                  'Indigo',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
          ],
        ));
  }
}
IndexedStack

Changez l’index pour voire ce qui sera affiché.

Le widget Stack de Flutter pour superposer des objets

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Retour en haut