在Android中,match_parent和wrap_content用于自动调整小部件相对于其父部件所包含内容的大小。

在Flutter中,似乎默认所有小部件都设置为wrap_content,我如何改变它,以便我可以填充它的宽度和高度,以它的父?


当前回答

对于匹配父选项,你可以用容器包装小部件,并给它一个这样的宽度

宽度:double.infinity

这种方法将使小部件填充屏幕上的最大可用空间。

其他回答

要让一个子填充它的父,只需将它包装到FittedBox中

    FittedBox(
     child: Image.asset('foo.png'),
     fit: BoxFit.fill,
   )

实际上有一些选择:

你可以使用sizebox。扩展以使您的小部件匹配父维度,或者只匹配宽度的sizebox (width: double.infinity),或者只匹配高度的sizebox (height: double.infinity)。

如果你想要一个wrap_content行为,这取决于你正在使用的父部件,例如,如果你把一个按钮放在一个列上,它会像wrap_content一样行为,而像match_parent一样使用它,你可以用一个扩展的小部件或一个大小框来包装按钮。

通过ListView,按钮获得match_parent行为,而要获得wrap_content行为,您可以使用像Row这样的Flex小部件来包装它。

使用展开的小部件将成为行、列或Flex的子部件 展开以填充主轴上的可用空间(例如,水平地填充 行或垂直列)。 https://docs.flutter.io/flutter/widgets/Expanded-class.html

使用Flexible小部件可以为行、列或Flex的子部件提供扩展以填充主轴上可用空间的灵活性(例如,水平地填充行或垂直地填充列),但与Expanded不同的是,Flexible不要求子部件填充可用空间。 https://docs.flutter.io/flutter/widgets/Flexible-class.html

使用小部件Wrap。

对于类似列的行为尝试:

  return Wrap(
          direction: Axis.vertical,
          spacing: 10,
          children: <Widget>[...],);

对于Row类行为尝试:

  return Wrap(
          direction: Axis.horizontal,
          spacing: 10,
          children: <Widget>[...],);

有关更多信息:Wrap (Flutter小部件)

为了获得match_parent和wrap_content的行为,我们需要 在行/列小部件中使用mainAxisSize属性,即mainAxisSize 属性取MainAxisSize枚举,有两个值,即 MainAxisSize。min,表现为wrap_content和mainaxisize .max 它的行为类似于match_parent。

原文链接

Stack(
  children: [
    Container(color:Colors.red, height:200.0, width:200.0),
    Positioned.fill(
      child: Container(color: Colors. yellow),
    )
  ]
),