Flutter开发之Container Widget

Container Widget

一个方便的小部件, 结合了普通的绘画、定位和大小的小部件。

容器首先用填充物(由装饰中存在的任何边界膨胀)包围子对象,然后对填充范围应用附加约束(如果其中一个为非空,则将宽度和高度合并为约束)。然后容器被从边缘描述的额外的空白空间包围。

在绘画过程中,容器首先应用给定的变换,然后绘制装饰填充填充范围,然后绘制子对象,最后绘制前场装饰,也填充填充填充范围。

没有子对象的容器尽量大,除非传入的约束是无限的,在这种情况下,它们尽量小。有子对象的容器会根据子对象的大小来调整大小。构造函数的width、height和constraints参数重写了这一点。

布局行为介绍(Layout behavior)

有关框布局模型的介绍,请参阅BoxConstraints

由于Container结合了许多其他小部件,每个小部件都有自己的布局行为,因此Container的布局行为有点复杂。

摘要:容器尝试按顺序:遵循对齐,将自身大小调整为子对象,以符合宽度,高度和约束,以扩展以适合父对象,尽可能小。

进一步来说:

如果窗口小部件没有子节点,没有高度,没有宽度,没有约束,并且父节点提供无限制约束,则Container尝试尽可能小。

如果窗口小部件没有子节点且没有对齐,但提供了高度,宽度或约束,则在给定这些约束和父节点约束的组合的情况下,Container会尽可能小。

如果窗口小部件没有子节点,没有高度,没有宽度,没有约束,没有对齐,但是父节点提供了有界约束,那么Container会扩展以适应父节点提供的约束。

如果窗口小部件具有对齐,并且父窗口提供无限制约束,则Container会尝试围绕子窗口调整自身大小。

如果窗口小部件具有对齐,并且父窗口提供有界约束,则Container会尝试展开以适合父窗口,然后根据对齐方式将子项置于其自身内部。

否则,窗口小部件具有子级但没有高度,没有宽度,没有约束,也没有对齐,并且Container将约束从父级传递给子级并调整其大小以匹配子级。

边距和填充属性也会影响布局,如这些属性的文档中所述。 (它们的效果仅仅增加了上述规则。)装饰可以隐含地增加填充(例如,BoxDecoration中的边界有助于填充);请参阅Decoration.padding

此示例显示一个48x48琥珀色方块(放置在中心小部件内,以防父小部件对容器应采用的大小有自己的意见),并留有一个空白,使其远离相邻小部件:

Container

Center(
  child: Container(
    margin: const EdgeInsets.all(10.0),
    color: Colors.amber[600],
    width: 48.0,
    height: 48.0,
  ),
)

这个例子展示了如何同时使用容器的许多特性。这些约束被设置为适合字体大小加上足够的垂直净空,同时水平展开以适合父级。填充用于确保内容和文本之间有空间。这个颜色使盒子变成蓝色。对齐会使子项在框中居中。最后,变换对整个装置应用轻微的旋转以完成效果:

屏幕快照 2019-05-25 下午6.39.27.png
Container(
  constraints: BoxConstraints.expand(
    height: Theme.of(context).textTheme.display1.fontSize * 1.1 + 200.0,
  ),
  padding: const EdgeInsets.all(8.0),
  color: Colors.blue[600],
  alignment: Alignment.center,
  child: Text('Hello World',
    style: Theme.of(context)
        .textTheme
        .display1
        .copyWith(color: Colors.white)),
  transform: Matrix4.rotationZ(0.1),
)

也可以看看:

AnimatedContainer,一种在变化时平滑动画属性的变体。
边框,其中包含大量使用Container的示例。
墨水,在材质上绘制装饰,允许InkResponse和InkWell喷溅在它们上面绘画。
布局小部件的目录。

构造方法(Constructors)

创建一个小部件, 结合了普通的绘画、定位和大小调整小部件。

Container({Key key, 
    AlignmentGeometry alignment,
    EdgeInsetsGeometry padding, 
    Color color, 
    Decoration decoration, 
    Decoration foregroundDecoration, 
    double width, 
    double height, 
    BoxConstraints constraints, EdgeInsetsGeometry margin, 
    Matrix4 transform, 
    Widget child 
})

属性(Properties)

  • alignment → AlignmentGeometry

    • 对齐内部的子级
  • child → Widget

    • 容器内部的子级
  • constraints → BoxConstraints

    • 要应用于子级的附加约束
  • decoration → Decoration

    • 子级背后的装饰
    • 可以设置边框、背景色、背景图片、圆角等属性
    • 需要注意的是 deorationcolor 背景颜色不能共存,二者同时只能有一个
    decoration: new BoxDecoration(
                   border: new Border.all(width: 2.0, color: Colors.red),
                   color: Colors.grey,
                   borderRadius: new BorderRadius.all(new Radius.circular(20.0)),
                   image: new DecorationImage(
                     image: new NetworkImage('http://b-ssl.duitang.com/uploads/item/201609/26/20160926203611_HXQxk.jpeg'),
                     centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
                   ),
                 ),
    
    
    • no decoration

      -
      decoration
    • 第一张图设置了背景色,未使用decoration;第二张图设置了decoration,未设置背景色

  • foregroundDecoration → Decoration

    • 在子级前面的装饰
    • 可以设置边框、背景色、背景图片、圆角等属性
    • 需要注意的是 deorationcolor 背景颜色不能共存,二者同时只能有一个
    foregroundDecoration: new BoxDecoration(
                   border: new Border.all(width: 2.0, color: Colors.red),
                   color: Colors.grey,
                   borderRadius: new BorderRadius.all(new Radius.circular(20.0)),
                   image: new DecorationImage(
                     image: new NetworkImage('http://b-ssl.duitang.com/uploads/item/201609/26/20160926203611_HXQxk.jpeg'),
                     centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
                   ),
                 ),
    
    
    • foregroundDecoration
    • 第一张图设置了背景色,未使用decoration;第二张图设置了decoration,未设置背景色

  • margin → EdgeInsetsGeometry

    • 我的理解就是外边距
  • padding → EdgeInsetsGeometry

    • 我的理解就是内边距
  • transform → Matrix4

    • 在绘制容器之前要应用的转换矩阵
  • hashCode → int

    • 此对象的哈希代码
  • key → Key

    • 控制一个小部件如何替换树中的另一个小部件
  • runtimeType → Type

    • 对象的运行时类型

方法(Methods)

  • build(BuildContext context) → Widget

    描述此窗口小部件表示的用户界面部分

  • debugFillProperties(DiagnosticPropertiesBuilder properties) → void

    添加与节点关联的其他属性

  • createElement() → StatelessElement

    创建StatelessElement以管理此窗口小部件在树中的位置

  • debugDescribeChildren() → List<DiagnosticsNode>

    返回描述此节点的子节点的DiagnosticsNode对象列表。

  • noSuchMethod(Invocation invocation) → dynamic

    访问不存在的方法或属性时调用

  • toDiagnosticsNode({String name, DiagnosticsTreeStyle style }) → DiagnosticsNode

    返回调试工具和DiagnosticsNode.toStringDeep使用的对象的调试表示形式

  • toString({DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String

    返回此对象的字符串表示形式

  • toStringDeep({String prefixLineOne: '', String prefixOtherLines, DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String

    返回此节点及其后代的字符串表示形式

  • toStringShallow({String joiner: ', ', DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String

    返回对象的单行详细描述

  • toStringShort() → String

    这个小部件的简短文字描述

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容