Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:扩展vs柔性_Flutter_Dart_Flutter Layout_Flutter Widget - Fatal编程技术网

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