Düğme Genişliği Eşleştirme Üst Öğe


120

Ana sayfa düzeninin genişliğine uyması için bir genişliği nasıl ayarlayabileceğimi bilmek istiyorum

new Container(
  width: 200.0,
  padding: const EdgeInsets.only(top: 16.0),
  child: new RaisedButton(
    child: new Text(
        "Submit",
        style: new TextStyle(
          color: Colors.white,
        )
    ),
    colorBrightness: Brightness.dark,
    onPressed: () {
      _loginAttempt(context);
    },
    color: Colors.blue,
  ),
),

ExpandedWidget hakkında biraz bilgim var ama Expandedgörünümü her iki yöne doğru genişletiyor, nasıl yapılacağını bilmiyorum.


1
Belki bunun yerine bir Sütun?
— Günter Zöchbauer

Evet yerine Konteyner sütun eklemek ama düğmenin genişliğini ebeveyne genişliği uzatabilirsiniz nasıl Wrap İçerik olduğunu
— Mohit Suthar

Basitçe bir FlatButton kullanabilir ve onu bir kabın içine sarabilir ve ortam sorgusunu kullanarak kapsayıcı genişliğini ekran genişliğine ekleyebilirsiniz aşağıdaki cevabımı arayın
— maheshmnj

Yanıtlar:


264

Doğru çözüm, SizedBox.expandparçacığı, childüst öğesinin boyutuyla eşleşecek şekilde zorlayan kullanmaktır .

SizedBox.expand(
  child: RaisedButton(...),
)

Daha fazla veya daha az özelleştirmeye izin veren birçok alternatif vardır:

SizedBox(
  width: double.infinity,
  // height: double.infinity,
  child: RaisedButton(...),
)

veya kullanarak ConstrainedBox

ConstrainedBox(
    constraints: const BoxConstraints(minWidth: double.infinity),
    child: RaisedButton(...),
)

31
SizedBox.expand, düğmenin tam genişlikte ve yükseklikte olmasını sağlayacaktır ki bu soru değildir. Soru, yalnızca yüksekliği değil, tam genişliği kaplayan bir düğme hakkındadır.
— Vinoth Kumar

3
@ RémiRousselet Vinoth'un yorumu geçerlidir. Bu artık kabul edilen cevap olduğundan, SizedBox için yalnızca genişliği özel olarak genişletmek için doğru yapıcıları ekleyebilir misiniz?
— user823447

Bu hatayı alıyorumFailed assertion: line 1645 pos 12: '!_debugDoingThisLayout': is not true.
— kapsid

Çözüm için Thnaks
— Ajay Kumar

İki yönlü cevabı da seviyorum, daha eksiksiz.
— Raiden Çekirdek

31

Boyut niteliği kullanılarak sağlanabilir ButtonThemeileminWidth: double.infinity

ButtonTheme(
  minWidth: double.infinity,
  child: MaterialButton(
    onPressed: () {},
    child: Text('Raised Button'),
  ),
),

veya https://github.com/flutter/flutter/pull/19416 indikten sonra

MaterialButton(
  onPressed: () {},
  child: SizedBox.expand(
    width: double.infinity, 
    child: Text('Raised Button'),
  ),
),


24

En basit yol, a FlatButtoniçine sarılmış kullanmaktır Container. Düğme varsayılan olarak üst öğesinin boyutunu alır ve bu nedenle Container.

            Container(
                  color: Colors.transparent,
                  width: MediaQuery.of(context).size.width,
                  height: 60,
                  child: FlatButton(
                    shape: new RoundedRectangleBorder(
                      borderRadius: new BorderRadius.circular(30.0),
                    ),
                    onPressed: () {},
                    color: Colors.red[300],
                    child: Text(
                      "Button",
                      style: TextStyle(
                        color: Colors.black,
                        fontFamily: 'Raleway',
                        fontSize: 22.0,
                      ),
                    ),
                  ),
                )

Çıktı:

görüntü açıklamasını buraya girin


18

Biraz araştırdıktan sonra bir çözüm buldum ve @ Günter Zöchbauer'e teşekkürler,

Container yerine sütun kullandım ve

özelliği, CrossAxisAlignment.stretch sütununa , Button öğesinin üstüyle eşleşecek şekilde ayarlayın

    new Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                new RaisedButton(
                  child: new Text(
                      "Submit",
                      style: new TextStyle(
                        color: Colors.white,
                      )
                  ),
                  colorBrightness: Brightness.dark,
                  onPressed: () {
                    _loginAttempt(context);
                  },
                  color: Colors.blue,
                ),
              ],
            ),

8
Column/ Rowtek çocuk düzeni için kullanılmamalıdır. Bunun yerine tek çocuk alternatifini kullanın. Bu şekilde Align, SizedBoxve benzeri.
— Rémi Rousselet

5

Widget'ın üst eşleştirmesini şu şekilde ayarlayabilirsiniz:

1) genişliği double.infinity olarak ayarlayın :

new Container(
          width: double.infinity,
          padding: const EdgeInsets.only(top: 16.0),
          child: new RaisedButton(
            child: new Text(
                "Submit",
                style: new TextStyle(
                  color: Colors.white,
                )
            ),
            colorBrightness: Brightness.dark,
            onPressed: () {
              _loginAttempt(context);
            },
            color: Colors.blue,
          ),
        ),

2) MediaQuery'yi kullanın:

new Container(
          width: MedialQuery.of(context).size.width,
          padding: const EdgeInsets.only(top: 16.0),
          child: new RaisedButton(
            child: new Text(
                "Submit",
                style: new TextStyle(
                  color: Colors.white,
                )
            ),
            colorBrightness: Brightness.dark,
            onPressed: () {
              _loginAttempt(context);
            },
            color: Colors.blue,
          ),
        ),

4

@Mohit Suthar,

Aşağıdaki gibi yüksekliği ve genişliği eşleştirmek için en iyi çözümlerden birini buldum

new Expanded(
          child: new Container(
              padding: EdgeInsets.all(16.0),
              margin: EdgeInsets.all(16.0),
              decoration: new BoxDecoration(
                  color: Colors.white,
                  borderRadius:
                      const BorderRadius.all(const Radius.circular(8.0)),
                  border: new Border.all(color: Colors.black, width: 1.0)),
              child: new Text("TejaDroid")),
        ), 

Burada ExpandedKontrolörün kalan tüm genişlik ve yüksekliği elde edip etmediğini kontrol edebilirsiniz .


1
Şimdiye kadarki en iyi çözüm
— M David

4

Bu benim için çalıştı .

Yukarıda verilen kodda ebeveyn eşleştirme genişliği veya yüksekliği vermenin en basit yolu.

...
width: double.infinity,
height: double.infinity,
...

4

İçin match_parentkullanabilirsiniz

SizedBox(
  width: double.infinity, // match_parent
  child: RaisedButton(...)
)

Herhangi bir belirli değer için kullanabilirsiniz

SizedBox(
  width: 100, // specific value
  child: RaisedButton(...)
)

1

Aşağıdaki kod benim için çalışıyor

       ButtonTheme(
            minWidth: double.infinity,
            child: RaisedButton(child: Text("Click!!", style: TextStyle(color: Colors.white),), color: Colors.pink, onPressed: () {}))

1

Bu benim için bağımsız bir widget'ta çalışıyor.

  Widget signinButton() {
    return ButtonTheme(
      minWidth: double.infinity,
      child: new FlatButton(
        onPressed: () {},
        color: Colors.green[400],
        textColor: Colors.white,
        child: Text('Flat Button'),
      ),
    );
  }

// It can then be used in a class that contains a widget tree.

1

Bu benim için çalışıyor.

    SizedBox(
             width: double.maxFinite,
             child: RaisedButton(
                 materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                 child: new Text("Button 2"),
                 color: Colors.lightBlueAccent,
                 onPressed: () => debugPrint("Button 2"),
              ),
     ), 

1

ListTileBir liste tüm genişliği doldurduğundan a kullanmak da işe yarar:

ListTile(
  title: new RaisedButton(...),
),

1

Bunu MaterialButton ile yapabilirsiniz

MaterialButton(
     padding: EdgeInsets.all(12.0),
     minWidth: double.infinity,
     onPressed: () {},
    child: Text("Btn"),
)

0
 new SizedBox(
  width: 100.0,
     child: new RaisedButton(...),
)

0

Bu benim için çalıştı

width: MediaQuery.of(context).size.width-100,

0

RaisedButton( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [Text('Submit')], ) ) Benim için çalışıyor.


0

En temel yaklaşım, Konteynerin genişliğini sonsuz olarak tanımlayarak kullanmaktır. Aşağıdaki kod örneğine bakın

Container(
    width: double.infinity,
    child:FlatButton(
        onPressed: () {
            //your action here
        },
        child: Text("Button"),

    )
)

0
         OutlineButton(
              onPressed: () {
                logInButtonPressed(context);
              },
              child: Container(
                width: MediaQuery.of(context).size.width / 2,
                child: Text(
                  “Log in”,
                  textAlign: TextAlign.center,
                ),
              ),
            )

Bunun gibi bir şey benim için çalışıyor.


0

Yerleştirin RaisedButton(...)birSizedBox

SizedBox(
  width: double.infinity,
  child: RaisedButton(...),
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.