64 votes

Flutter : Suppression du rembourrage dans les boutons - FlatButton, ElevatedButton, OutlinedButton

Je cherche à supprimer la marge par défaut du bouton plat, mais je ne parviens pas à la définir ou à la remplacer.

buttons with padding

Column(children: <Widget>[
      Container(
          children: [
            FractionallySizedBox(
              widthFactor: 0.6,
              child: FlatButton(
                  color: Color(0xFF00A0BE),
                  textColor: Color(0xFFFFFFFF),
                  child: Text('LOGIN', style: TextStyle(letterSpacing: 4.0)),
                  shape: RoundedRectangleBorder(side: BorderSide.none)))),
      Container(
          margin: const EdgeInsets.only(top: 0.0),
          child: FractionallySizedBox(
              widthFactor: 0.6,
              child: FlatButton(
                  color: Color(0xFF00A0BE),
                  textColor: Color(0xFF525252),
                  child: Text('SIGN UP',
                      style: TextStyle(
                          fontFamily: 'Lato',
                          fontSize: 12.0,
                          color: Color(0xFF525252),
                          letterSpacing: 2.0)))))
    ])

Je suis tombé sur des choses comme ButtonTheme et même debugDumpRenderTree() mais je n'ai pas été capable de les mettre en œuvre correctement.

146voto

Andrey Turkovsky Points 5150
FlatButton(materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,)

4 votes

Tu sais... ça a fait l'affaire. Je ne pense pas que je serais jamais tombé sur ça. Je suis stupide, je cherche la syntaxe de la marge et du remplissage.

2 votes

Tout d'abord, j'ai aussi regardé les marges et les renforts.)

1 votes

Je pense qu'il faut noter que la suppression de la taille de la cible n'est "généralement" pas une bonne pratique, parce que la conception matérielle a des directives strictes concernant la taille des cibles des robinets que les widgets matériels de flutter essaient de respecter.

70voto

CopsOnRoad Points 4705

UPDATE (Nouveaux boutons)

  • TextButton

    enter image description here

    TextButton(
      onPressed: () {},
      style: TextButton.styleFrom(
        minimumSize: Size.zero, // Set this
        padding: EdgeInsets.zero, // and this
      ),
      child: Text('TextButton'),
    )
  • ElevatedButton

    enter image description here

    ElevatedButton(
      onPressed: () {},
      style: ElevatedButton.styleFrom(
        minimumSize: Size.zero, // Set this
        padding: EdgeInsets.zero, // and this
      ),
      child: Text('ElevatedButton'),
    )
  • OutlinedButton

    enter image description here

    OutlinedButton(
      onPressed: () {},
      style: OutlinedButton.styleFrom(
        minimumSize: Size.zero, // Set this
        padding: EdgeInsets.zero, // and this
      ),
      child: Text('OutlinedButton'),
    )

Vous pouvez également utiliser la version brute MaterialButton

MaterialButton(
  onPressed: () {},
  color: Colors.blue,
  minWidth: 0,
  height: 0,
  padding: EdgeInsets.zero,
  child: Text('Button'),
)

0 votes

MinWidth a fait l'affaire

2 votes

Ceci devrait être la réponse acceptée car Flutter a mis à jour les boutons.

1 votes

Oui, merci mon frère. Cette réponse devrait être acceptée. Ils sont utiles pour de nombreux boutons dans Flutter <3

38voto

Joel Broström Points 132

Je trouve plus facile d'envelopper le bouton dans un fichier de type ButtonTheme .

Spécifiez le maxWith et la hauteur (mis à zéro pour envelopper l'enfant) et passez ensuite votre bouton comme enfant.

Vous pouvez également déplacer la plupart des propriétés de vos boutons du bouton vers le thème afin de rassembler toutes les propriétés dans un seul widget.

ButtonTheme(
  padding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0), //adds padding inside the button
  materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, //limits the touch area to the button area
  minWidth: 0, //wraps child's width
  height: 0, //wraps child's height
  child: RaisedButton(onPressed: (){}, child: Text('Button Text')), //your original button
);

1 votes

Par curiosité, y a-t-il un problème avec ma réponse ou les autres étaient-elles simplement meilleures ?

0 votes

Votre réponse est meilleure. Elle couvre toutes les situations similaires à celle-ci.

0 votes

Cela ne résout pas mon problème. Le FlatButton enveloppé dans Row a toujours un rembourrage supplémentaire. Et je ne sais pas d'où il vient.

34voto

ahmadMarafa Points 1248
FlatButton(
  padding: EdgeInsets.all(0) 
)

a fait l'affaire pour moi

8 votes

FlatButton a une taille minimale de 88.0 par 36.0 sur la base des données suivantes documentation La solution ci-dessus ne fonctionnera donc pas pour les petits boutons, il faut les envelopper dans ButtonTheme. Consultez la réponse de @joel-broström.

5 votes

Ou mieux EdgeInsets.zero

0 votes

Comme @VivekBansal l'a souligné cette solution ne fonctionnera pas, la réponse de joel-brostrom fait l'affaire.

32voto

Durdu Points 1153

Avec l'aimable autorisation de FlatButton introduit un rembourrage fantôme sur le git de flutter.

Si quelqu'un a besoin d'un widget avec un événement onPressed sans que Flutter ne le remplisse.

Vous devez utiliser InkWell

InkWell(
    child: Center(child: Container(child: Text("SING UP"))),
    onTap: () => onPressed()
);

Une zone rectangulaire d'un matériau qui réagit au toucher.

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