Flutter控件之Container

简介: Flutter控件之Container

Container简介

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

Container的组成

child元素首先会被padding包着;然后添加额外的constraints限制;最后添加margin。


Container的绘制

绘制时首先会绘制transform效果;接着绘制decoration;然后绘制child;最后绘制foregroundDecoration,填充填充填充范围。


Container尺寸大小调节

Container在没有子节点(children)的时候,会试图去变得足够大。如果constraints是unbounded限制,Container会试图去变得足够小。带子节点的Container,会根据子节点尺寸调节自身尺寸,但是Container构造器中如果包含了width、height以及constraints,则会按照构造器中的参数来进行尺寸的调节。


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

总的来说就是:Container尝试顺序是:遵守对齐,根据子对象调整自身大小,遵守宽度、高度和约束,扩展以适应父对象,尽可能小。

更具体地说:

如果小部件没有子部件、没有高度、没有宽度、没有约束,并且父部件提供无界约束,则Container会尽量缩小尺寸。

如果小部件没有子部件,也没有对齐,但提供了高度、宽度或约束,则考虑到这些约束和父约束的组合,Container将尽可能小。

如果小部件没有子部件、没有高度、没有宽度、没有约束和对齐方式,但父部件提供有边界的约束,则Container将展开以适应父部件提供的约束。

如果小部件具有对齐方式,并且父部件提供了无限约束,那么Container将尝试围绕子部件调整自身大小。

如果小部件具有对齐方式,并且父部件提供有边界的约束,则Container将尝试展开以适应父部件,然后根据对齐方式将子部件放置在自身中。

否则,小部件有一个子部件,但没有高度、宽度、约束和对齐方式,Container将约束从父部件传递给子部件,并调整其大小以匹配子部件。

边距和填充财产也会影响布局,如这些财产的文档中所述。(它们的效果只是增强了上述规则。)装饰可以隐式地增加填充(例如,BoxDecoration中的边框有助于填充)


Container实例

Container在没有子节点(children)的时候,会试图去变得足够大。

代码如下:

Container(

margin: const EdgeInsets.all(10.0),

color: Colors.amber[600],

),


a3301cf05992d97b94741904377a00de.png


带子节点的Container,会根据子节点尺寸调节自身尺寸

Container(

margin: const EdgeInsets.all(10.0),

color: Colors.amber[600],

child: Text(

‘This is a Container’,

style: TextStyle(fontSize: 24),

),

),

abb5750c09b80f0a1d380a682e91aa33.png


Container构造器中如果包含了width、height以及constraints,则会按照构造器中的参数来进行尺寸的调节。

Container(

margin: const EdgeInsets.all(10.0),

color: Colors.amber[600],

width: 48.0,

height: 48.0,

child: Text(

‘This is a Container’,

style: TextStyle(fontSize: 24),

),

),

08ae50bc7bd6010226585bdeb65b271b.png




相关文章
|
Android开发 iOS开发 容器
Flutter控件封装之轮播图Banner
Flutter中实现轮播图的方式有很多种,比如使用三方flutter_swiper,card_swiper等等,使用这些三方,可以很快很方便的实现一个轮播图展示,基本上也能满足我们日常的开发需求,如果说,想要一些定制化的操作,那么就不得不去更改源码或者自己自定义一个,自己定义的话,Flutter中提供了原生组件PageView,可以使用它很方便的来实现一个轮播图。
374 0
|
4月前
|
Android开发
Flutter控件的显示与隐藏
Flutter控件的显示与隐藏
156 3
|
4月前
|
开发者 监控 开发工具
如何将JSF应用送上云端?揭秘在Google Cloud Platform上部署JSF应用的神秘步骤
【8月更文挑战第31天】本文详细介绍如何在Google Cloud Platform (GCP) 上部署JavaServer Faces (JSF) 应用。首先,确保已准备好JSF应用并通过Maven构建WAR包。接着,使用Google Cloud SDK登录并配置GCP环境。然后,创建`app.yaml`文件以配置Google App Engine,并使用`gcloud app deploy`命令完成部署。最后,通过`gcloud app browse`访问应用,并利用GCP的监控和日志服务进行管理和故障排查。整个过程简单高效,帮助开发者轻松部署和管理JSF应用。
61 0
|
5月前
|
移动开发 UED 容器
Flutter-自定义可展开文本控件
Flutter-自定义可展开文本控件
90 0
|
5月前
Flutter-自定义三角形评分控件
Flutter-自定义三角形评分控件
49 0
|
5月前
|
容器
Flutter Container设置 width 无效
Flutter Container设置 width 无效
|
7月前
Flutter StatefulWidget传递数据,多级控件传递数据
Flutter StatefulWidget传递数据,多级控件传递数据 在Flutter中,StatefulWidget可以通过构造函数将数据传递给其子控件,这种方式适用于一些简单的场景。但是,当存在多级嵌套控件时,将数据从祖先传递到后代可能会变得困难。在这种情况下,可以使用Flutter提供的InheritedWidget类来传递数据。
115 0
Flutter的ClipRRect控件介绍
ClipRRect(Rounded Rectangle Clip)是Flutter中的一个控件,用于将其子控件剪裁为圆角矩形形状。
|
API Android开发
Flutter控件封装之视频进度条
视频控制器,三方所提供的样式,有时很难满足我们的需求,对于此情况,我们不得不在此基础上自行封装,今天所分享的文章就是一个很简单的控制器封装案例,包含了基本的播放暂停,全屏和退出全屏,以及时间和进度的展示,封装了事件回调以及各个属性的控制,基本上可以满足大部分的业务需求,即便不满足,大家也可以在此基础之上拓展。
299 0
|
Android开发 UED
Flutter控件之Tab选项卡封装
Tab选项卡,这是一个非常常见且权重很高的一个组件,随便打开一个App,比如掘金,如下图,首页顶部就是一个Tab选项卡,这个功能可以说,几乎每个App都会存在。
233 0