Flutter 颤振:扩展vs柔性
我使用了Flutter 颤振:扩展vs柔性,flutter,dart,flutter-layout,flutter-widget,Flutter,Dart,Flutter Layout,Flutter Widget,我使用了扩展的和灵活的小部件,它们的工作原理似乎是一样的 扩展和灵活的区别是什么?Expanded只是Flexible 使用这种方式: Expanded( child: Foo(), ); 严格等同于: Flexible( fit: FlexFit.tight, child: Foo(), ); 如果需要不同的配合,可能需要在扩展上使用灵活,这在某些响应性布局中很有用 FlexFit.tight和FlexFit.loose之间的区别在于,loose将允许其子对象具有最大尺寸,而
扩展的
和灵活的
小部件,它们的工作原理似乎是一样的
扩展和灵活的区别是什么?
Expanded
只是Flexible
使用这种方式:
Expanded(
child: Foo(),
);
严格等同于:
Flexible(
fit: FlexFit.tight,
child: Foo(),
);
如果需要不同的
配合
,可能需要在扩展
上使用灵活
,这在某些响应性布局中很有用
FlexFit.tight
和FlexFit.loose
之间的区别在于,loose将允许其子对象具有最大尺寸,而tight将强制该子对象填充所有可用空间。扩展的
-它是灵活的
,具有设置配合
class Expanded extends Flexible {
const Expanded({
Key key,
int flex = 1,
@required Widget child,
}) : super(
key: key,
flex: flex,
fit: FlexFit.tight,
child: child
);
}
脚手架(
appBar:appBar(),
正文:专栏(
儿童:[
划船(
儿童:[
buildExpanded(),
buildFlexible(),
],
),
划船(
儿童:[
buildExpanded(),
buildExpanded(),
],
),
划船(
儿童:[
buildFlexible(),
buildFlexible(),
],
),
],
),
);
您可以使用Flexible调整行和列中小部件的大小。它主要用于调整不同子部件的空间,同时保持与父部件的关系 同时,Expanded更改发送到行和列的子级的约束;这有助于填补那里的可用空间。因此,当您将您的孩子包装在一个扩展的小部件中时,它会填满空的空间 从Flitter的官方YouTube频道提供这些视频只是为了帮助人们,他们可能会在未来寻找这些视频
Flexible下的小部件默认为WRAP_CONTENT,尽管您可以使用参数Fit对其进行更改 扩展的下的小部件是匹配父项您可以使用flex对其进行更改扩展的()只不过是灵活的()
Flexible(fit:FlexFit.tight)=扩展()
但是,Flexible默认使用fit:FlexFit.loose
FlexFit.tight=想要紧密地贴合父母,尽可能占用更多空间
FlexFit.loose=希望将loose安装到父对象中,为其自身占用尽可能少的空间。如果使用
Flexible
而不是Expanded
,唯一的区别是Flexible
允许其子对象具有与Flexible
本身相同或更小的宽度,而Expanded
则强制其子项具有与Expanded
完全相同的宽度。但是Expanded
和Flexible
在调整尺寸时都忽略了孩子的宽度
灵活
Flexible
小部件包装小部件,因此小部件可以调整大小。当灵活小部件包装一个小部件时,该小部件将成为灵活小部件的子部件,并被认为是灵活的。在布局不灵活的小部件之后,小部件将根据其flex
和fit
属性调整大小
扩展
扩展的小部件可以包装小部件并强制小部件填充额外的空间
以下是示例
使用Flexible
调整行
或列
中小部件的大小。这样,您可以调整子小部件的间距,同时保持其相对于父小部件的大小Expanded
更改子窗口小部件的约束,因此它会填充任何空白
Row(children:[
Flexible(
child: Container(color: Colors.red, child: Text('This is a very long text that won’t fit the line.'))),
Expanded(
child: Container(color: Colors.green, child: Text(‘Goodbye!’))),
]
)
注意:这意味着不可能按子对象的大小按比例展开
行
子对象。行使用确切的子行宽度,或者在使用扩展的或灵活的时完全忽略它最大大小和可用空间
在这里的意思不一样吗?不,所谓最大尺寸,我的意思是像Flexible的子代一样,在一个列中有一个最大高度的约束框。简单地说,Flexible。紧密的会迫使孩子们占据整个可用空间,而灵活的。松散的会让孩子们做他们想做的事情。有些子项可能占用整个空间,有些子项可能不占用,具体取决于它们的类型。Flexible只占用所需的空间,Expanded则占用所有可用空间,这与flex
因素有关。有关更多信息,请参阅。Flexible和Container都占用了所需的空间。让我困惑的是,当容器是Flexible
或Expanded
的子容器时,行为是相同的。这是因为没有子容器的容器尽量大。因此,容器使Flexible看起来像是它迫使容器变大,但实际上它是容器真正的愿望,Flexible只是让它变大,而扩展则迫使容器变大。这对android开发者来说是一个很好的解释!尽管Flexible看起来像WRAP_内容,但我们在可用空间中使用Align-insideflexible进行对齐。
Row(children:[
Flexible(
child: Container(color: Colors.red, child: Text('This is a very long text that won’t fit the line.'))),
Expanded(
child: Container(color: Colors.green, child: Text(‘Goodbye!’))),
]
)