363 votes

Créer un bouton arrondi / bouton avec border-radius dans Flutter

Je suis en train de développer une application Android en Flutter. Comment puis-je ajouter un bouton arrondi ?

2 votes

Vous pouvez utiliser RaisedButton ou InkWell

0 votes

Cela a été mentionné ici de plusieurs façons mightytechno.com/rounded-button-flutter

728voto

Abror Esonaliyev Points 987

1. Résumé de la solution

FlatButton et RaisedButton sont dépréciés.

Ainsi, vous pouvez utiliser shape qui a été placé dans le style la propriété, pour TextButton et ElevatedButton .

Il y a quelques changements depuis Flutter 2.0 :

2. Bouton arrondi

A l'intérieur de la style existe la shape propriété :

style: ButtonStyle(
  shape: MaterialStateProperty.all<RoundedRectangleBorder>(
    RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(18.0),
      side: BorderSide(color: Colors.red)
    )
  )
)

Enter image description here

Bouton carré

Pour un bouton carré, vous pouvez utiliser ElevatedButton ou à ajouter d'une autre manière :

style: ButtonStyle(
  shape: MaterialStateProperty.all<RoundedRectangleBorder>(
    RoundedRectangleBorder(
      borderRadius: BorderRadius.zero,
      side: BorderSide(color: Colors.red)
    )
  )
)

Enter image description here

Exemple complet

Row(
  mainAxisAlignment: MainAxisAlignment.end,
  children: [
    TextButton(
      child: Text(
        "Add to cart".toUpperCase(),
        style: TextStyle(fontSize: 14)
      ),
      style: ButtonStyle(
        padding: MaterialStateProperty.all<EdgeInsets>(EdgeInsets.all(15)),
        foregroundColor: MaterialStateProperty.all<Color>(Colors.red),
        shape: MaterialStateProperty.all<RoundedRectangleBorder>(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(18.0),
            side: BorderSide(color: Colors.red)
          )
        )
      ),
      onPressed: () => null
    ),
    SizedBox(width: 10),
    ElevatedButton(
      child: Text(
        "Buy now".toUpperCase(),
        style: TextStyle(fontSize: 14)
      ),
      style: ButtonStyle(
        foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
        backgroundColor: MaterialStateProperty.all<Color>(Colors.red),
        shape: MaterialStateProperty.all<RoundedRectangleBorder>(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.zero,
            side: BorderSide(color: Colors.red)
          )
        )
      ),
      onPressed: () => null
    )
  ]
)

2 votes

Ce code fonctionne, mais ne peut-on pas supprimer l'option shape: MaterialStateProperty.all<RoundedRectangleBorder>(...) et assigner directement un RoundedRectangleBorder(...) à la shape la propriété ?

231voto

dhuma1981 Points 378

Vous pouvez utiliser le widget RaisedButton. Le widget RaisedButton possède une propriété de forme que vous pouvez utiliser comme indiqué dans l'extrait ci-dessous.

ElevatedButton(
          style: ButtonStyle(
              shape: MaterialStateProperty.all<RoundedRectangleBorder>(
                  RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(18.0),
                      side: BorderSide(color: Colors.teal, width: 2.0)))),
          child: Text('Submit'),
          onPressed: () {},
        ),

0 votes

RaisedButton est déprécié et n'est plus utilisé. Utilisez le bouton élevé avec ButtonStyle comme suggéré par Peter.

126voto

CopsOnRoad Points 4705

Mise à jour

Les boutons de gauche étant désormais obsolètes, utilisez les boutons de droite.

Deprecated    -->   Recommended

RaisedButton  -->   ElevatedButton
OutlineButton -->   OutlinedButton
FlatButton    -->   TextButton

  • ElevatedButton

  1. Utilisation de StadiumBorder

    enter image description here

    ElevatedButton(
      onPressed: () {},
      child: Text('Button'),
      style: ElevatedButton.styleFrom(shape: StadiumBorder()),
    )
  2. Utilisation de RoundedRectangleBorder

    enter image description here

    ElevatedButton(
      onPressed: () {},
      child: Text('Button'),
      style: ElevatedButton.styleFrom(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(12), // <-- Radius
        ),
      ),
    )
  3. Utilisation de CircleBorder

    enter image description here

    ElevatedButton(
      onPressed: () {},
      child: Text('Button'),
      style: ElevatedButton.styleFrom(
        shape: CircleBorder(),
        padding: EdgeInsets.all(24),
      ),
    )
  4. Utilisation de BeveledRectangleBorder

    enter image description here

    ElevatedButton(
      onPressed: () {},
      child: Text('Button'),
      style: ElevatedButton.styleFrom(
        shape: BeveledRectangleBorder(
          borderRadius: BorderRadius.circular(12)
        ),
      ),
    )

OutlinedButton

  1. Utilisation de StadiumBorder

    enter image description here

    OutlinedButton(
      onPressed: () {},
      child: Text('Button'),
      style: OutlinedButton.styleFrom(
        shape: StadiumBorder(),
      ),
    )
  2. Utilisation de RoundedRectangleBorder

    enter image description here

    OutlinedButton(
      onPressed: () {},
      child: Text('Button'),
      style: OutlinedButton.styleFrom(
        shape: BeveledRectangleBorder(
          borderRadius: BorderRadius.circular(12),
        ),
      ),
    )
  3. Utilisation de CircleBorder :

    enter image description here

    OutlinedButton(
      onPressed: () {},
      child: Text('Button'),
      style: OutlinedButton.styleFrom(
        shape: CircleBorder(),
        padding: EdgeInsets.all(24),
      ),
    )
  4. Utilisation de BeveledRectangleBorder

    enter image description here

    OutlinedButton(
      onPressed: () {},
      child: Text('Button'),
      style: OutlinedButton.styleFrom(
        shape: BeveledRectangleBorder(
          borderRadius: BorderRadius.circular(12),
        ),
      ),
    )

Bouton de texte

TextButton fonctionne également de manière similaire à ElevatedButton et OutlinedButton Cependant, vous ne pouvez voir les formes que lorsque vous appuyez sur le bouton.

39voto

Rahul Points 311

Vous pouvez simplement utiliser RaisedButton


Padding(
  padding: EdgeInsets.only(left: 150.0, right: 0.0),
  child: RaisedButton(
    textColor: Colors.white,
    color: Colors.black,
    child: Text("Search"),
    onPressed: () {},
    shape: new RoundedRectangleBorder(
      borderRadius: new BorderRadius.circular(30.0),
    ),
  ),
)

Sortie :

enter image description here

Plus d'informations : RSCoder

35voto

Blasanka Points 3456

Vous pouvez simplement utiliser RaisedButton ou vous pouvez utiliser InkWell pour obtenir un bouton personnalisé et aussi des propriétés comme onDoubleTap , onLongPress , etc. :

new InkWell(
  onTap: () => print('hello'),
  child: new Container(
    //width: 100.0,
    height: 50.0,
    decoration: new BoxDecoration(
      color: Colors.blueAccent,
      border: new Border.all(color: Colors.white, width: 2.0),
      borderRadius: new BorderRadius.circular(10.0),
    ),
    child: new Center(child: new Text('Click Me', style: new TextStyle(fontSize: 18.0, color: Colors.white),),),
  ),
),

Enter image description here

Si vous voulez utiliser le splashColor et highlightColor les propriétés dans le InkWell utilisez l'option Material comme parent du widget InkWell au lieu de décorer le conteneur (en supprimant la propriété de décoration). Découvrez pourquoi ici .

4 votes

Si vous voulez le InkWell pour les coins arrondis alors vous devez ajouter borderRadius: BorderRadius.circular(10.0) à la InkWell sinon il ira jusqu'aux bords du rectangle de délimitation.

0 votes

@VictorRendina Je cherchais un moyen de rendre les ondulations arrondies, merci pour votre commentaire. Ajoutez ceci comme une réponse distincte aux questions sur l'encrier car beaucoup ne le mentionnent pas.

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