Erstellen Sie in Flutter eine abgerundete Schaltfläche / Schaltfläche mit Randradius

170

Ich entwickle derzeit eine Android-App in Flutter. Wie kann ich eine abgerundete Schaltfläche hinzufügen?

Kingsley Kbc Comics
quelle
1
Sie können verwenden RaisedButtonoderInkWell
Blasanka
Dies hier haben mehrere Möglichkeiten erwähnt mächtigtechno.com
Ishan Fernando

Antworten:

290

1. Lösungszusammenfassung

Sie können shapefür FlatButtonund verwenden RaisedButton.

2. Abgerundeter Knopf

shape: RoundedRectangleBorder(
  borderRadius: BorderRadius.circular(18.0),
  side: BorderSide(color: Colors.red)
),

Geben Sie hier die Bildbeschreibung ein

Quadratischer Knopf

shape: RoundedRectangleBorder(
  borderRadius: BorderRadius.circular(0.0),
  side: BorderSide(color: Colors.red)
),

Geben Sie hier die Bildbeschreibung ein

Vollständiges Beispiel

Row(
  mainAxisAlignment: MainAxisAlignment.end,
  children: <Widget>[
    FlatButton(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(18.0),
        side: BorderSide(color: Colors.red)),
      color: Colors.white,
      textColor: Colors.red,
      padding: EdgeInsets.all(8.0),
      onPressed: () {},
      child: Text(
        "Add to Cart".toUpperCase(),
        style: TextStyle(
          fontSize: 14.0,
        ),
      ),
    ),
    SizedBox(width: 10),
    RaisedButton(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(18.0),
        side: BorderSide(color: Colors.red)),
      onPressed: () {},
      color: Colors.red,
      textColor: Colors.white,
      child: Text("Buy now".toUpperCase(),
        style: TextStyle(fontSize: 14)),
    ),
  ],   
)
Abror Esonaliyev
quelle
1
Hallo Abror, das war sehr hilfreich für mich. Ich danke dir sehr!
Jkoech
196

Sie können das RaisedButton-Widget verwenden. Das Widget für erhöhte Schaltflächen verfügt über eine Form-Eigenschaft, die Sie wie im folgenden Snippet gezeigt verwenden können.

 RaisedButton(
          child: Text("Press Me"),
          onPressed: null,
          shape: RoundedRectangleBorder(borderRadius: new BorderRadius.circular(30.0))
        )
dhuma1981
quelle
35

Geben Sie hier die Bildbeschreibung ein

Es gibt viele Möglichkeiten, dies zu tun. Ich liste hier einige auf.

(1) Verwenden RoundedRectangleBorder

RaisedButton(
  shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
  onPressed: () {},
  child: Text("Button"),
)

(2) Verwenden ClipRRect

ClipRRect(
  borderRadius: BorderRadius.circular(40),
  child: RaisedButton(
    onPressed: () {},
    child: Text("Button"),
  ),
)

(3) Verwenden ClipOval

ClipOval(
  child: RaisedButton(
    onPressed: () {},
    child: Text("Button"),
  ),
)

(4) Verwenden ButtonTheme

ButtonTheme(
  shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
  child: RaisedButton(
    onPressed: () {},
    child: Text("Button"),
  ),
)

(5) Verwenden StadiumBorder

RaisedButton(
  shape: StadiumBorder(),
  onPressed: () {},
  child: Text("Button"),
)
CopsOnRoad
quelle
31

Sie können einfach RaisedButton verwenden


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),
    ),
  ),
)

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Weitere Infos: RSCoder

Rahul Shukla
quelle
1
Vielen Dank! Ich suche nach der Antwort, die Sie erwähnt haben.
Pramesh Bhalala
28

Sie können einfach verwenden RaisedButtonoder Sie können verwenden InkWell, um benutzerdefinierte Schaltflächen und auch Eigenschaften wie onDoubleTap, onLongPressund 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),),),
  ),
),

Geben Sie hier die Bildbeschreibung ein

Wenn Sie verwenden möchten splashColor, highlightColorImmobilien - InkWellWidget, verwenden MaterialWidget als das übergeordnete InkWellWidget anstelle des Behälters der Dekoration (Löschen Dekoration Eigentum). Lesen Sie warum? hier .

Blasanka
quelle
4
Wenn Sie das InkWellBild an den abgerundeten Ecken befestigen möchten , müssen Sie borderRadius: BorderRadius.circular(10.0)es dem InkWellWidget hinzufügen , da es sonst an die Kanten des Begrenzungsrechtecks ​​gelangt.
Victor Rendina
@ VictorRendina Ich habe nach einer Möglichkeit gesucht, die Wellen abzurunden, danke für deinen Kommentar. Fügen Sie dies als spärliche Antwort auf Fragen zum Tintenfass hinzu, da viele dies nicht erwähnen.
Sudesh
5

Mit dem folgenden Code können Sie abgerundete Schaltflächen mit einer Verlaufsfarbe erstellen.

 Container(
          width: 130.0,
          height: 43.0,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(30.0),
            gradient: LinearGradient(
              // Where the linear gradient begins and ends
              begin: Alignment.topRight,
              end: Alignment.bottomLeft,
              // Add one stop for each color. Stops should increase from 0 to 1
              stops: [0.1, 0.9],
              colors: [
                // Colors are easy thanks to Flutter's Colors class.
                Color(0xff1d83ab),
                Color(0xff0cbab8),
              ],
            ),
          ),
          child: FlatButton(
            child: Text(
              'Sign In',
              style: TextStyle(
                fontSize: 16.0,
                fontFamily: 'Righteous',
                fontWeight: FontWeight.w600,
              ),
            ),
            textColor: Colors.white,
            color: Colors.transparent,
            shape:
                RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),
            onPressed: () {

            },
          ),
        );
Tahseen Quraishi
quelle
3

Sie sollten sich wahrscheinlich insbesondere mit dieser Seite der Dokumente vertraut machen: Ecken abrunden .

Die Dokumente zeigen Ihnen, wie Sie das Styling einer Komponente und das entsprechende Styling in CSS ändern können, wenn Sie damit bereits vertraut sind.

Devin Fields
quelle
3

Sie können diesen Code für eine transparente, abgerundete Schaltfläche verwenden, indem Sie eine transparente Farbe an die Farbeigenschaft im Inneren übergeben BoxDecoration. z.B.color: Colors.transparent. Beachten Sie außerdem, dass diese Schaltfläche nur die Widgets Containerund verwendet GestureDetector.

Container(
    height: 50.0,
    child: GestureDetector(
        onTap: () {},
        child: Container(
            decoration: BoxDecoration(
                border: Border.all(
                    color: Color(0xFFF05A22),
                    style: BorderStyle.solid,
                    width: 1.0,
                ),
                color: Colors.transparent,
                borderRadius: BorderRadius.circular(30.0),
            ),
            child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                    Center(
                        child: Text(
                           "BUTTON",
                            style: TextStyle(
                                color: Color(0xFFF05A22),
                                fontFamily: 'Montserrat',
                                fontSize: 16,
                                fontWeight: FontWeight.w600,
                                letterSpacing: 1,
                            ),
                        ),
                    )
                ],
            ),
        ),
    ),
)

Transaparenter Hintergrundknopf

mjhansen3
quelle
1

Wenn jemand nach einem vollständigen runden Knopf sucht, dann habe ich es auf diese Weise erreicht.

Center(
            child: SizedBox.fromSize(
              size: Size(80, 80), // button width and height
              child: ClipOval(
                child: Material(
                  color: Colors.pink[300], // button color
                  child: InkWell(
                    splashColor: Colors.yellow, // splash color
                    onTap: () {}, // button pressed
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        Icon(Icons.linked_camera), // icon
                        Text("Picture"), // text
                      ],
                    ),
                  ),
                ),
              ),
            ),
          )
Speedy11
quelle
0

Sie können jederzeit die Materialschaltfläche verwenden, wenn Sie die Material-App als Haupt-Widget verwenden.

Padding(
  padding: EdgeInsets.symmetric(vertical: 16.0),
  child: Material(
    borderRadius: BorderRadius.circular(30.0),//Set this up for rounding corners.
    shadowColor: Colors.lightBlueAccent.shade100,
    child: MaterialButton(
      minWidth: 200.0,
      height: 42.0,
      onPressed: (){//Actions here//},
      color: Colors.lightBlueAccent,
      child: Text('Log in', style: TextStyle(color: Colors.white),),
    ),
  ),
)
Matias
quelle
0

Im Flutter- Container()Widget können Sie Ihr Container()Widget stylen. Mit dem Widget können Sie einen Rand oder eine abgerundete Ecke eines Widgets festlegen

Wenn Sie eine beliebige Art von Styling und Dekoration festlegen möchten, fügen Sie dieses Widget in das Container()Widget ein, das viele Eigenschaften für die Dekoration bietet.

Container(
  width: 100,
  padding: EdgeInsets.all(10),
  alignment: Alignment.center,
  decoration: BoxDecoration(
          color: Colors.blueAccent,
          borderRadius: BorderRadius.circular(30)), // make rounded corner
  child: Text("Click"),
)
Sanjayrajsinh
quelle
0

Um eine beliebige Form in You'r Button zu verwenden, stellen Sie sicher, dass Sie den gesamten Code im Button-Widget ausführen

 **shape: RoundedRectangleBorder(
        borderRadius: new BorderRadius.circular(18.0),
        side: BorderSide(color: Colors.red) ),**

Wenn Sie möchten, dass das Quadrat "BorderRadius.circular" (0.0) verwendet, wird es automatisch zum Quadrat

der Knopf so`

Geben Sie hier die Bildbeschreibung ein

Hier ist der gesamte Quellcode für den Bildschirm "Give UI"

 Scaffold(
    backgroundColor: Color(0xFF8E44AD),
    body: new Center(
      child: Column(
        children: <Widget>[
          Container(
            margin: EdgeInsets.fromLTRB(90, 10, 20, 0),
            padding: new EdgeInsets.only(top: 92.0),
            child: Text(
              "Currency Converter",
              style: TextStyle(
                fontSize: 48,
                fontWeight: FontWeight.bold,
                color: Colors.white,
              ),
            ),
          ),
          Container(
            margin: EdgeInsets.only(),
            padding: EdgeInsets.all(25),
            child: TextFormField(
              decoration: new InputDecoration(
                filled: true,
                fillColor: Colors.white,
                labelText: "Amount",
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(10),
                ),
              ),
            ),
          ),
          Container(
            padding: EdgeInsets.all(25),
            child: TextFormField(
              decoration: new InputDecoration(
                filled: true,
                fillColor: Colors.white,
                labelText: "From",
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(10),
                ),
              ),
            ),
          ),
          Container(
            padding: EdgeInsets.all(25),
            child: TextFormField(
              decoration: new InputDecoration(
                  filled: true,
                  fillColor: Colors.white,
                  labelText: "To",
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(10),
                  )),
            ),
          ),
          SizedBox(height: 20.0),
          MaterialButton(
            height: 58,
            minWidth: 340,
            shape: RoundedRectangleBorder(
                borderRadius: new BorderRadius.circular(12)),
            onPressed: () {},
            child: Text(
              "CONVERT",
              style: TextStyle(
                fontSize: 24,
                color: Colors.black,
              ),
            ),
            color: Color(0xFFF7CA18),
          ),
        ],
      ),
    ),
  ),
);
Champ 96k
quelle
0

Hier ist eine andere Lösung

 Container(
                    height: MediaQuery.of(context).size.height * 0.10,
                    width: MediaQuery.of(context).size.width,
                    child: ButtonTheme(
                      minWidth: MediaQuery.of(context).size.width * 0.75,
                      child: RaisedButton(
                        shape: RoundedRectangleBorder(
                            borderRadius: new BorderRadius.circular(25.0),
                            side: BorderSide(color: Colors.blue)),
                        onPressed: () async {
                           // do something 
                        },
                        color: Colors.red[900],
                        textColor: Colors.white,
                        child: Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text("Button Text,
                              style: TextStyle(fontSize: 24)),
                        ),
                      ),
                    ),
                  ),
ekoRem
quelle
0

Hier ist der Code für Ihr Problem. Sie müssen nur einen einfachen Container mit Randradius in der Boxdekoration nehmen.

    new Container(
      alignment: Alignment.center,
      decoration: BoxDecoration(
        borderRadius: BorderRadius.all(Radius.circular(15.0)),
        color: Colors.blue,
      ),

      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(10.0),
            child: new Text(
              "Next",
              style: new TextStyle(
                 fontWeight: FontWeight.w500,
                  color: Colors.white,
                  fontSize: 15.0,
               ),
             ),
          ),
        ],
      ),
    ),
Paras Sharma
quelle
0
RaisedButton(
          child: Text("Button"),
          onPressed: (){},
          shape: RoundedRectangleBorder(borderRadius: new BorderRadius.circular(30.0),
          side: BorderSide(color: Colors.red))
        )
Shilpa Navale
quelle
1
Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
27огдан Опир
ok danke du sagst mir wo ich falsch
liege