115 votes

Flutter : J'essaie de centrer en bas un élément dans une colonne, mais il reste aligné à gauche

J'essaie de centrer un widget au bas d'une colonne, mais il continue à s'aligner sur la gauche.

return new Column(
  new Stack(
    new Positioned(
      bottom: 0.0, 
      new Center(
        new Container(),
      ),
    ),
  ),
); 

L'existence du positionné force le conteneur vers la gauche, au lieu de le centrer. En revanche, la suppression du positionnement place le conteneur au centre, au milieu.

165voto

Rémi Rousselet Points 45139

Aligner est la solution si vous n'avez qu'un seul child .

Si vous en avez plus, envisagez de faire quelque chose comme ça :

return new Column(
  crossAxisAlignment: CrossAxisAlignment.center,
  mainAxisSize: MainAxisSize.max,
  mainAxisAlignment: MainAxisAlignment.end,
  children: <Widget>[
      // Your elements here
  ],
);

0 votes

Jetez un coup d'œil à la réponse d'Andrew, ci-dessous...

122voto

ruan65 Points 402

La façon la plus simple et la plus correcte de le faire est d'utiliser Spacer().

Exemple :

Column(
    children: [
      SomeWidgetOnTheTop(),
      Spacer(),
      SomeCenterredBottomWidget(),
    ],
);

5 votes

Super ! Je ne sais pas pourquoi je n'ai jamais entendu parler de Spacer avant, il a résolu correctement le problème.

11 votes

Ne fonctionne pas si la colonne est dans SingleChildScrollView

4 votes

@evals Comment utiliser Spacer() dans le cas où le parent est SingleChildScrollView() ?

75voto

Abhijith Brumal Points 876
Expanded(
  child: Align(
    alignment: FractionalOffset.bottomCenter,
      child: Padding(
        padding: EdgeInsets.only(bottom: 10.0),
          child: //Your widget here,
    ),
  ),
),

0 votes

@Eliaber Lopes Ta ;-)

1 votes

@Prasath Bon à savoir mon pote !

43voto

Tushar Pandey Points 417

J'ai utilisé cette approche,

Ce que je veux, c'est un layout toujours en bas mais à chaque fois que le clavier s'affiche, cela layout vient aussi sur elle

enter image description here

body: Container(
        color: Colors.amber,
        height: double.maxFinite,
        child: new Stack(
          //alignment:new Alignment(x, y)
          children: <Widget>[
            new Positioned(
              child: myWidget(context, data.iconName, Colors.red),
            ),
            new Positioned(
              child: new Align(
                alignment: FractionalOffset.bottomCenter,
                child: myWidget(context, data.iconName, Colors.green)
              ),
            )
          ],
        ),
      ),

26voto

Mary Points 1717

1) Vous pouvez utiliser un Aligner widget, avec FractionalOffset.bottomCenter .

2) Vous pouvez également définir left: 0.0 y right: 0.0 dans le Positioned .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X