Flutter-如何创建宽度与父级匹配的容器?

时间:2019-08-08 18:59:09

标签: flutter dart

我在Flutter应用中使用了这个简单的小部件:

  FlatButton(
   child: Column(
          children: <Widget>[
            Image.asset(assets, height: 40, width: 40),
            Text('Title'),
            //my color line
            Container(
              height: 5,
              width: ?,
              color: Colors.blue[800],
            )
          ],
        )
  )

我需要色线(在臀部),宽度与父级匹配。但我不知道该怎么做。

4 个答案:

答案 0 :(得分:3)

两种方法

约束框:

它创建一个在其子项上施加其他约束的窗口小部件,该窗口小部件内部使用SingleChildRenderObjectWidget在该子窗口小部件上添加约束。

ConstrainedBox(
        constraints:
            const BoxConstraints(minWidth: double.infinity, maxHeight: 10),
        child: Container(
          color: Colors.blue,
        ),
      ),

SizedBox:

SizedBox只是创建一个具有给定宽度/高度的框,并且不允许子级超出给定尺寸。它还使用SingleChildRenderObjectWidget来确定子渲染区域

SizedBox(
        width: double.infinity,
        height: 5,
        // height: double.infinity,
        child: Container(
          color: Colors.blue,
        ),
      ),

答案 1 :(得分:2)

使用IntrinsicWidth

 FlatButton(
   child: IntrinsicWidth(
   child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Image.asset(assets, height: 40, width: 40),
            Text('Title'),
            //my color line
            Container(
              height: 5,
              width: ?,
              color: Colors.blue[800],
            )
          ],
        ))
  )

Some cheatsheet

答案 2 :(得分:2)

Container(
    height: 5,
    width: double.infinity,
    color: Colors.blue[800],
)

答案 3 :(得分:1)

Container中没有子项的

Column将始终展开。如果您确实添加了child,则会对其进行包装。

此外,如果您不限制按钮中的Column,它也会增长到最大可用高度。

我对您的建议是,不要在按钮的“列”中放置一个空的Container,而应将按钮用“容器”包装起来并为其底部边框。这将在底部显示您的彩色线。

Container(
  decoration: BoxDecoration(
    border: Border(
      bottom: BorderSide(width: 5, color: Colors.blue[800]),
    ),
  ),
  child: FlatButton(
    onPressed: () {},
    child: Column(
      mainAxisSize: MainAxisSize.min, // prevent Column to expand full height
      children: <Widget>[
        Icon(Icons.cake, size: 40),
        Text('title'),
      ],
    ),
  ),
),