Induk Pencocokan Lebar Tombol


120

Saya ingin tahu bagaimana cara mengatur lebar agar sesuai dengan induk lebar tata letak

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

Saya tahu sedikit tentang Expandedwidget tetapi Expandedmemperluas tampilan ke kedua arah, saya tidak tahu bagaimana melakukannya.


1
Mungkin Kolom sebagai gantinya?
Günter Zöchbauer

Ya, saya lampirkan kolom alih-alih Wadah tetapi lebar tombol adalah Bungkus Konten bagaimana bisa meregangkan lebar ke induk
Mohit Suthar

Anda cukup menggunakan FlatButton dan membungkusnya di dalam wadah dan menambahkan lebar wadah ke lebar layar dengan menggunakan mediaquery, cari jawaban saya di bawah ini
maheshmnj

Jawaban:


264

Solusi yang tepat adalah dengan menggunakan SizedBox.expandwidget, yang memaksakannya childagar sesuai dengan ukuran induknya.

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

Ada banyak alternatif, yang memungkinkan lebih banyak atau lebih sedikit penyesuaian:

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

atau menggunakan ConstrainedBox

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

31
SizedBox.expand akan membuat tombol mengambil lebar dan tinggi penuh, yang bukan pertanyaannya. Pertanyaannya adalah tentang tombol yang hanya menutupi lebar penuh, bukan tinggi.
Vinoth Kumar

3
Komentar @ RémiRousselet Vinoth valid. Karena sekarang ini adalah jawaban yang diterima, dapatkah Anda menambahkan konstruktor yang tepat untuk SizedBox untuk secara khusus memperluas hanya lebarnya?
pengguna823447

Saya menerima kesalahan iniFailed assertion: line 1645 pos 12: '!_debugDoingThisLayout': is not true.
kapsid

Terima kasih untuk solusinya
Ajay Kumar

Saya suka jawaban keduanya, lebih lengkap.
Raiden Core

31

Atribut ukuran dapat diberikan menggunakan ButtonThemedenganminWidth: double.infinity

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

atau setelah https://github.com/flutter/flutter/pull/19416 mendarat

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


24

Cara termudah adalah dengan menggunakan FlatButtonbungkus di dalam a Container, Tombol secara default mengambil ukuran induknya dan menetapkan lebar yang diinginkan ke 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,
                      ),
                    ),
                  ),
                )

Keluaran:

masukkan deskripsi gambar di sini


17

Setelah beberapa penelitian, saya menemukan beberapa solusi, dan terima kasih kepada @ Günter Zöchbauer,

Saya menggunakan kolom, bukan Container dan

atur properti ke kolom CrossAxisAlignment.stretch ke Fill match parent of Button

    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/ Rowtidak boleh digunakan untuk tata letak anak tunggal. Gunakan alternatif anak tunggal sebagai gantinya. Seperti Align, SizedBox, dan yang sejenis.
Rémi Rousselet

5

Anda dapat mengatur orang tua yang cocok dari widget dengan

1) setel lebar menjadi double.infinity :

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) Gunakan MediaQuery:

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

@Bayu_joo

Menemukan salah satu solusi terbaik untuk mencocokkan induk dengan lebar dan tinggi seperti di bawah ini

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

Di sini Anda dapat memeriksa bahwa ExpandedPengontrol memperoleh lebar dan tinggi sisa .


1
Sejauh ini solusi terbaiknya
M David

4

Ini berhasil untuk saya.

Cara termudah untuk memberikan lebar atau tinggi orang tua yang cocok dalam kode yang diberikan di atas.

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

4

Untuk match_parentAnda bisa menggunakan

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

Untuk nilai tertentu yang dapat Anda gunakan

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

1

Kode berikut bekerja untuk saya

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

1

Ini berfungsi untuk saya di widget mandiri.

  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

Ini bekerja untuk saya.

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

1

Menggunakan a ListTilejuga berfungsi dengan baik, karena daftar memenuhi seluruh lebar:

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

1

Anda dapat melakukannya dengan MaterialButton

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

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

0

Yang ini berhasil untuk saya

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

0

RaisedButton( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [Text('Submit')], ) ) Ini bekerja untuk saya.


0

Pendekatan paling dasar adalah menggunakan Container dengan mendefinisikan lebarnya menjadi tak terbatas. Lihat contoh kode di bawah ini

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

Sesuatu seperti ini berhasil untuk saya.


0

Tempatkan Anda RaisedButton(...)diSizedBox

SizedBox(
  width: double.infinity,
  child: RaisedButton(...),
)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.