52

我正在尝试创建方形按钮,但 Expanded 似乎与容器的工作方式不同。以下面的代码为例

new Expanded(
 flex: 2,
   child: new Column(
     children: <Widget>[
       new Expanded(
         child:new Row(
           children: <Widget>[
             new Expanded(child: new MaterialButton(...)),
             new Expanded(child: new MaterialButton(....)),

             new Expanded(child: new Container(color: Colors.red)),
             new Expanded(child: new Container(color: Colors.green)),
           ]
         )
       )
     ],
   )
 )

 ....

它显示两个水平扩展但不垂直扩展的按钮。同时,容器将水平和垂直扩展。如果我执行以下操作,也会出现相同的效果:

new Expanded(
 flex: 2,
   child: new Column(
     children: <Widget>[
       new Expanded(
         child:new Column(
           children: <Widget>[
             new Expanded(child: new MaterialButton(...)),
             new Expanded(child: new MaterialButton(....)),

             new Expanded(child: new Container(color: Colors.red)),
             new Expanded(child: new Container(color: Colors.green)),
           ]
         )
       )
     ],
   )
 )

 ....

我将行更改为列的位置。按钮将垂直扩展,但不会水平扩展,而容器将同时进行。

有没有办法让我的按钮在垂直和水平方向上展开以适应它们的父级?

4

8 回答 8

82

crossAxisAlignment属性添加到您的Row;

crossAxisAlignment: CrossAxisAlignment.stretch
于 2018-04-06T10:52:12.167 回答
21

ButtonTheme用with包装minWidth: double.infinity允许提供约束

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

或者在https://github.com/flutter/flutter/pull/19416登陆之后

  MaterialButton(
    onPressed: () {},
    child: SizedBox.expand(
      width: double.infinity, 
      child: Text('Raised Button'),
    ),
  ),
于 2018-07-16T11:01:28.677 回答
6

我们可以添加 Button insider Container。

解决方案:

Container(
            width: double.infinity,
            child: RaisedButton(
              onPressed: null,
              child: Text('NEXT'),
            ),
          )
于 2020-04-18T09:04:43.587 回答
5

你也可以试试

  1. 使用SizedBox

    SizedBox(
      width: double.maxFinite, // set width to maxFinite
      child: RaisedButton(...),
    )
    
  2. 使用MaterialButtonminWidth属性。

    MaterialButton(
      minWidth: double.maxFinite, // set minWidth to maxFinite
      color: Colors.blue,
      onPressed: () {},
      child: Text("Button"),
    )
    
于 2019-08-03T02:25:07.757 回答
5

在 Flutter 2.+ 中考虑这个解决方案:


ElevatedButton(
  style: ElevatedButton.styleFrom(
    minimumSize: const Size(double.infinity, double.infinity), // <--- this line helped me
  ),
  onPressed: () {},
  child: Icon(
    Icons.keyboard_return
  ),
)
于 2021-06-08T21:43:17.393 回答
3

您可以在 child:column 下插入

crossAxisAlignment:CrossAxisAlignment.stretch

我的代码

我的结果

于 2020-08-02T04:39:23.760 回答
0
MaterialButton(
          minWidth: MediaQuery.of(context).size.width, // set minWidth to width of the device screen
          onPressed: () {},
          child: Text("Button"),
        )

供参考https://api.flutter.dev/flutter/widgets/MediaQuery-class.html

于 2021-06-29T09:41:47.083 回答
0

VisualDensity是您正在寻找的东西。将其添加到ButtonStyle对象。

ElevatedButton(
  style: const ButtonStyle(
    visualDensity: VisualDensity(
      horizontal: VisualDensity.maximumDensity,
      vertical: VisualDensity.maximumDensity,
    ),
  ),
  ...
),
于 2021-11-09T09:51:26.823 回答