107 votes

Définir l'espace entre les éléments dans Row Flutter

Code:

new Container(
          alignment: FractionalOffset.center,
          child: new Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              new FlatButton(
                child: new Text('Vous n'avez pas de compte?', style: new TextStyle(color: Color(0xFF2E3233))),
              ),
              new FlatButton(
                child: new Text('S'inscrire.', style: new TextStyle(color: Color(0xFF84A2AF), fontWeight: FontWeight.bold),),
                onPressed: moveToRegister,
              )
            ],
          ),
        ),  

Et voici le résultat : https://dartpad.dev/?id=6bbfc6139bdf32aa7b47eebcdf9623ba

Comment corriger le fait que les deux éléments FlatButton soient côte à côte sans espace entre le centre de la largeur de l'écran?

0 votes

3 votes

Avez-vous essayé : MainAxisAlignment.spaceAround ?

0 votes

Ajouter sizedbox. Consultez ce mightytechno.com/flutter-row-widget

211voto

CopsOnRoad Points 4705

Il existe de nombreuses façons de le faire, j'en donne quelques exemples ici :

  1. Utilisez SizedBox si vous souhaitez définir un espace spécifique

    Row(
      children: [
        Text("1"),
        SizedBox(width: 50), // give it width
        Text("2"),
      ],
    )

    entrer la description de l'image ici


  1. Utilisez Spacer si vous souhaitez les éloigner le plus possible.

    Row(
      children: [
        Text("1"),
        Spacer(), // use Spacer
        Text("2"),
      ],
    )

    entrer la description de l'image ici


  1. Utilisez mainAxisAlignment en fonction de vos besoins :

    Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly, // use whichever suits your need
      children: [
        Text("1"),
        Text("2"),
      ],
    )

    entrer la description de l'image ici


  1. Utilisez Wrap à la place de Row et donnez un espacement

    Wrap(
      spacing: 100, // définissez l'espacement ici
      children: [
        Text("1"),
        Text("2"),
      ],
    )

    entrer la description de l'image ici


  1. Utilisez Wrap à la place de Row et donnez-lui un alignement

    Wrap(
      alignment: WrapAlignment.spaceAround, // définissez votre alignement
      children: [
        Text("1"),
        Text("2"),
      ],
    )

    entrer la description de l'image ici

4 votes

Rien n'a changé. L'espace entre les deux boutons FlatButton est toujours là, comme sur l'image dans ma question.

0 votes

@marcelo.wdrb J'ai mis à jour le code, s'il vous plaît vérifier.

0 votes

Il manque flex :)

181voto

MainAxisAlignment

début - Placez les enfants aussi près du début de l'axe principal que possible.

entrer la description de l'image ici

fin - Placez les enfants aussi près de la fin de l'axe principal que possible.

entrer la description de l'image ici

centre - Placez les enfants aussi près du milieu de l'axe principal que possible.

entrer la description de l'image ici

spaceBetween - Placez l'espace libre de manière égale entre les enfants.

entrer la description de l'image ici

spaceAround - Placez l'espace libre de manière égale entre les enfants ainsi que la moitié de cet espace avant et après le premier et le dernier enfant.

entrer la description de l'image ici

spaceEvenly - Placez l'espace libre de manière égale entre les enfants ainsi qu'avant et après le premier et le dernier enfant.

entrer la description de l'image ici

Exemple:

  child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          Text('Ligne1'),
          Text('Ligne2')
        ],
      )

0 votes

Je recherche une solution où mes deux textes sont de longueurs différentes, de sorte que lorsqu'ils sont placés au centre l'un à côté de l'autre, ils semblent décentrés ensemble.

25voto

anmol.majhail Points 11892

Suppression de l'espace - :

new Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              GestureDetector(
                child: new Text('Vous n'avez pas de compte?',
                    style: new TextStyle(color: Color(0xFF2E3233))),
                onTap: () {},
              ),
              GestureDetector(
                onTap: (){},
                  child: new Text(
                'S'inscrire.',
                style : new TextStyle(
                    color: Color(0xFF84A2AF), fontWeight: FontWeight.bold),
              ))
            ],
          ),

OU

GestureDetector(
            onTap: (){},
            child: new Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                new Text('Vous n'avez pas de compte?',
                    style: new TextStyle(color: Color(0xFF2E3233))),
                new Text(
                  'S'inscrire.',
                  style: new TextStyle(
                  color: Color(0xFF84A2AF), fontWeight: FontWeight.bold),
                )
              ],
            ),
          ),

2 votes

Ils sont côte à côte, mais avec un espace trop grand entre eux.

0 votes

Mise à jour de la réponse!

1 votes

Rien n'a changé. Merci encore pour votre aide, mais aucune de vos solutions ne fonctionne pour moi. J'ai cet espace bizarre entre les deux FlatButtons. D'autres solutions?

18voto

AlanKley Points 1257

Vous pouvez utiliser des espaces réservés si tout ce que vous voulez est un peu d'espace entre les éléments d'une ligne. L'exemple ci-dessous centre 2 widgets Text dans une ligne avec un peu d'espace entre eux.

Spacer crée un espaceur vide et ajustable qui peut être utilisé pour ajuster l'espacement entre les widgets dans un conteneur Flex, comme Row ou Column.

Dans une row, si nous voulons mettre de l'espace entre deux widgets de manière à occuper tout l'espace restant.

    widget = Row (
    children: [
      Spacer(flex: 20),
      Text(
        "Element #1",
      ),
      Spacer(),  // Par défaut flex: 1
      Text(
        "Element #2",
      ),
      Spacer(flex: 20),
    ]
  );

3voto

Guvanch Points 157
Ligne(
 enfants: [
  Flexible(
   child: TextFormField()),
  Container(width: 20, height: 20),
  Flexible(
   child: TextFormField())
 ])

Cela fonctionne pour moi, il y a 3 widgets à l'intérieur de la ligne: Flexible, Container, Flexible

1 votes

Puisque vous empruntez cette voie, pourquoi ne pas simplement utiliser SizedBox(width: 10) ...

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