【Flutter基础】1.1-什么是组件

157 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

  • FlutterLogo
  • Placeholder 组件(占位)
  • Container(容器)

FlutterLogo(少用)

FlutterLogo组件就是一个专门用于渲染Flutter徽标的组件。项目比较少用,用于Flutter演示或者宣传介绍Flutter的时候

    FlutterLogo( 
        size: 100,  // 尺寸,默认24,单位是逻辑像素
        style: FlutterLogoStyle. stacked, 
    )

Flutter框架中的尺寸或者位置信息,例如高度、宽度等一般都以逻辑像素作为单位

什么是逻辑像素?

大家一定非常熟悉像素的概念,即屏幕上一个个可以独立显示颜色的小点。例如在一块1920×1080像素的分辨率的屏幕上,水平方向有1920像素,垂直方向有1080像素。通过简单地相乘,可以得出这块屏幕约有200万像素。

随着屏幕制造工艺的改进和科技的发展,电子设备的分辨率越来越高,呈现出的画面越来越细腻,同时屏幕上的每个物理像素也变得越来越小。在同样的6英寸屏幕上,部分手机屏幕只有200万像素,但也有一些手机屏幕则会用到800万像素甚至更多。

由于每个物理像素的规格不同,在界面设计时像素不再是一种合理的单位。例如若将一个按钮的宽度设置为500像素,则在老式或低端的屏幕上或许能占5cm,但在高清屏幕上由于像素密度高,500像素可能只占不到2cm,因此,Flutter框架使用比较现代的“逻辑像素”概念,相当于安卓原生开发里的displaypixel单位,或iOS原生开发里的CGPoint概念。运行时,Flutter程序会根据当前的设备信息自动提供逻辑像素到物理像素的转换,最终提供统一的“每38像素约为1cm”或“每英寸约96像素”的接口[插图]。这样开发者在处理页面布局时,就不需要考虑不同设备屏幕的像素密度了。

Placeholder 组件(占位)

Placeholder(占位),顾名思义就是有该模块还未实现,但是需要在屏幕布局上留下适当的空间。

这个组件一般不传任何参数就可以应付大多场景。一般会占满全部可用空间的。

Placeholder()

image.png

Container 组件

Container(容器),Container组件就是这样一个结合了定义尺寸、形状、背景颜色、间距、留白、装饰等多功能于一身的组件。虽然这些功能都有对应的组件,但是初学者套用Container是最简便和易记,后续熟悉之后适当使用能有助于缩短代码量同时增加可读性。

    Container( width: 200, height: 100, color: Colors.grey, )

image.png

  • 嵌套子组件

除了绘制图形之外,Container组件更长用于包装和修饰其他组件。借助其child参数传入另一个组件,以达成嵌套的效果。【这里需要注意的是,如果嵌套的子组件的尺寸小于这个Container组件,则还需要通过传入alignment(对齐)属性设置内部的小组件应该怎样摆放,如居中、左上、右下等。如果没有传入alignment参数,则Container组件不会自动把child居中,而是会将child设置为自身尺寸。】

实战:最外层框灰底位置左上 中间黑底位置中下 最内层白色位置居中

  • 常用属性

1. width和height

宽高,类型为double,默认值为null,单位逻辑像素。若Container组件只被设置尺寸,没有其他功能(填充色或修饰属性等),可以考虑用SizedBox组件

2.color

填充色,类型为Color,当值为null则为透明,没有填充小效果。例如:Colors.blue,Colors. red. withOpacity(0.5)

3.child

子组件,类型为Widget。如果不传入且没有定义Container组件尺寸,则Container会尽量占满父级组件的全部空间。Container组件只支持嵌套一个子组件,如果需要传入多个组件,则可考虑使用Column、RowStack组件。

4.alignment

alignment 对齐,使用该属性设置对齐方式,类型为Alignment类构,造函数为Alignment(double x,double y),取值范围是[-1.0,1.0]。0.0则表示坐落于正中间

-1.01.0
横轴最左边最右边
纵轴最顶部最底部

5.margin和padding

间距留白和填充留白。类型为EdgeInsets类。三种写法。以padding为例子

padding: const EdgeInsets.fromLTRB(16.0,16.0,16.0,16.0) // 左上右下
padding: EdgeInsets.all(16.0) // 上下左右各添加16像素补白
padding: EdgeInsets.only(left: 16.0, top: 16.0, right: 16.0, bottom: 16.0) // 不一定都写,想设哪个就设哪个

之后类似的都是读书笔记,这里是《Flutter组件详解与实践》 王浩然