按钮宽度匹配父级

问题描述 投票:101回答:19

我想知道,如何才能将宽度设置为 匹配父母 版面宽度

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

我知道一点 Expanded 小部件 Expanded 我不知道怎么做,我想知道如何设置一个宽度来匹配父布局的宽度new Container( width: 200.0, padding: const EdgeInsets.only(top: 16.0, child: new ...

flutter flutter-layout
19个回答
250
投票

正确的解决方案是使用 SizedBox.expand 小组件,该小组件强制执行其 child 以匹配其父代的大小。

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

有许多替代方案,允许或多或少的定制。

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

或者使用 ConstrainedBox

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

29
投票

大小属性可以使用 ButtonThememinWidth: double.infinity

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

或之后 https:/github.comflutterflutterpull19416 落地

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

24
投票

最简单的方法是使用 FlatButton 封装 Container按钮默认采用其父体的大小,所以给按钮分配一个所需的宽度。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,
                      ),
                    ),
                  ),
                )

输出。

enter image description here


24
投票
Container(
  width: double.infinity,
  child: RaisedButton(...),
),

14
投票

经过研究,我发现了一些解决方案, 感谢@Günter Zöchbauer。

我用列代替了容器和

设置为列 CrossAxisAlignment.stretch 填充匹配按钮的父体

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

4
投票

这个 奏效 对我来说。

最简单的方法是在上面给定的代码中给出match-parent的宽度或高度。

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

4
投票

对于 match_parent 你可以用

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

对于任何一个特定的值,你可以使用

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

4
投票

您可以通过以下方式设置小组件的匹配父级。

1) 设置宽度为 双.无穷大 :

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。

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

3
投票

@Mohit Suthar,

找到了一个最好的解决方案 匹配父母宽度 以及 高度 如下

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

在这里你可以检查 Expanded 控制器 囫囵吞枣 残留 宽度高度.


1
投票

以下代码对我有用

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

1
投票

在一个自带的小部件中,这对我来说是有效的。

  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
投票

这对我来说是可行的。

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

1
投票

使用一个 ListTile 也可以,因为列表会填满整个宽度。

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

1
投票

这个对我很有用

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

1
投票

你可以这样做 材料按钮

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

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

0
投票

RaisedButton( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [Text('Submit')], ) ) 对我来说是可行的。


0
投票

最基本的方法是使用Container,将其宽度定义为无限大。请看下面的代码示例

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

这样的东西对我来说很有用。


0
投票

把你的 RaisedButton(...) 在...中 SizedBox

SizedBox(
  width: double.infinity,
  child: RaisedButton(...),
)
© www.soinside.com 2019 - 2024. All rights reserved.