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.