Utwórz zaokrąglony przycisk / przycisk z border-radius we Flutter

173

Obecnie pracuję nad aplikacją na Androida we Flutterze. Jak mogę dodać zaokrąglony przycisk?

Kingsley Kbc Comics
źródło
1
Możesz użyć RaisedButtonlubInkWell
Blasanka
To tutaj wspomniało o wielu sposobach mightytechno.com/rounded-button-flutter
Ishan Fernando

Odpowiedzi:

300

1. Podsumowanie rozwiązania

Możesz użyć shapedla FlatButtoni RaisedButton.

2. Zaokrąglony przycisk

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

wprowadź opis obrazu tutaj

Przycisk kwadratowy

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

wprowadź opis obrazu tutaj

Kompletny przykład

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
źródło
1
Cześć Abror, to było dla mnie bardzo pomocne. Dziękuję bardzo!
jkoech
198

Możesz użyć widżetu RaisedButton. Widżet podniesionego przycisku ma właściwość kształtu, którą można wykorzystać, jak pokazano na poniższym fragmencie.

 RaisedButton(
          child: Text("Press Me"),
          onPressed: null,
          shape: RoundedRectangleBorder(borderRadius: new BorderRadius.circular(30.0))
        )
dhuma1981
źródło
37

wprowadź opis obrazu tutaj

Jest na to wiele sposobów. Wymieniam kilka tutaj.

(1) Korzystanie RoundedRectangleBorder

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

(2) Korzystanie ClipRRect

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

(3) Korzystanie ClipOval

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

(4) Korzystanie ButtonTheme

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

(5) Korzystanie StadiumBorder

RaisedButton(
  shape: StadiumBorder(),
  onPressed: () {},
  child: Text("Button"),
)
CopsOnRoad
źródło
31

Możesz po prostu użyć 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),
    ),
  ),
)

Wynik:

wprowadź opis obrazu tutaj

Więcej informacji: RSCoder

Rahul Shukla
źródło
1
Dzięki! Szukam odpowiedzi, o której wspomniałaś.
Pramesh Bhalala
28

Możesz po prostu użyć RaisedButtonalbo można użyć InkWell, aby uzyskać właściwości niestandardowych przycisków, a także jak onDoubleTap, onLongPressi 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),),),
  ),
),

wprowadź opis obrazu tutaj

Jeśli chcesz użyć splashColor, highlightColornieruchomości w InkWellwidget, należy użyć Materialwidgetu jako rodzica InkWellwidget zamiast dekorowania pojemnika (usuwanie własności dekoracji). Przeczytaj dlaczego? tutaj .

Blasanka
źródło
4
Jeśli chcesz InkWellprzyciąć do zaokrąglonych rogów, musisz dodać borderRadius: BorderRadius.circular(10.0)do InkWellwidżetu również w przeciwnym razie przejdzie on do krawędzi prostokąta ograniczającego.
Victor Rendina
@VictorRendina Szukałem sposobu na zaokrąglenie zmarszczek, dzięki za komentarz. dodaj to jako sporadyczną odpowiedź na pytania dotyczące kałamarza, ponieważ wielu o tym nie wspomina.
sudesz
5

Możesz użyć poniższego kodu, aby utworzyć zaokrąglony przycisk z kolorem gradientu.

 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
źródło
3

Prawdopodobnie powinieneś zapoznać się w szczególności z tą stroną z dokumentami: zaokrąglanie rogów .

Dokumentacja pokazuje, jak zmienić styl komponentu i odpowiadający mu styl w css, jeśli już to znasz.

Devin Fields
źródło
3

Możesz użyć tego kodu dla przezroczystego zaokrąglonego przycisku, przekazując przezroczysty kolor do właściwości koloru wewnątrz BoxDecoration. na przykład. color: Colors.transparent. Zwróć też uwagę, że ten przycisk używa tylko widżetów Containeri 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,
                            ),
                        ),
                    )
                ],
            ),
        ),
    ),
)

Przycisk przezroczystego tła

mjhansen3
źródło
1

Jeśli ktoś szuka kompletnego okrągłego guzika, to udało mi się to w ten sposób.

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
źródło
0

Zawsze możesz użyć przycisku Material, jeśli używasz aplikacji Material jako głównego widżetu.

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
źródło
0

W Container()widżecie Flutter stylizuj swój Container()widżet. Za pomocą widżetu możesz ustawić obramowanie lub zaokrąglony róg dowolnego widżetu

Jeśli chcesz ustawić dowolny rodzaj stylizacji i dekoracji zestawu, umieść ten widget w Container()widżecie, który zapewnia wiele właściwości dekoracji.

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
źródło
0

aby użyć dowolnego kształtu w You'r Button, upewnij się, że wykonałeś cały kod w widżecie Button

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

jeśli chcesz, aby kwadrat użył `BorderRadius.circular (0.0), automatycznie przekształci się w Square

przycisk taki jak ten

wprowadź opis obrazu tutaj

Oto cały kod źródłowy dla ekranu podanego interfejsu użytkownika

 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
źródło
0

tutaj jest inne rozwiązanie

 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
źródło
0

Oto kod twojego problemu, po prostu musisz wziąć prosty pojemnik z promieniem obramowania w dekoracyjnym pudełku.

    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
źródło
0
RaisedButton(
          child: Text("Button"),
          onPressed: (){},
          shape: RoundedRectangleBorder(borderRadius: new BorderRadius.circular(30.0),
          side: BorderSide(color: Colors.red))
        )
shilpa navale
źródło
1
Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
Богдан Опир
ok, dzięki, powiedz mi, gdzie się mylę
shilpa navale