FLUTTER 开发初识

  • Flutter 布局之Container
    • Container简介
    • Container 组成
    • Container的构造

Flutter 布局之Container

最近新接触一个开发平台Flutter,它是谷歌在2018开发者大会上正式发布的一个全新开发工具,它最显著的特点就是一套源码两个平台(Android/iOS)公用。手上没有Mac电脑,所以就用它来尝试一下。
Flutter使用的开发语言是Dart。这个语言也是谷歌研发的,它与Java十分相似,有一定Java基础的更好上手,不过只要你了解过面向对象的编程语言,上手也很简单。Flutter的一个大的优点是它开发应用全部是由widget组成的,这也成了它的一个大的缺点,因为它的widge实在是太多了,必须要花费一定的时间去了解它。而且Flutter的布局在我看来并不是很理想,可能是我刚接触这个语言,在今后的学习中,还需要继续去巩固。
关于怎么在Windows/Mac上安装Flutter,百度上教程一大堆,唯一要注意的是,gradle要手动下载,手动解压。其实所有在AS中更新不了的SDK或者Plugins都需要手动下载手动解压到目录中。(我装了一个下午才装好,都是泪)

Container简介

Container在Flutter官方文档里的定义如下

A convenience widget that combines common painting, positioning, and sizing widgets.

其本质上是一个包含多个widget的widget,它内部有绘制widget、定位widget、尺寸widget。后续看到的不少widget,都是通过一些更基础的widget组合而成的。在iOS中没有给定这种控件,不过iOS中的View属性与其类似。有iOS开发经验的可以借鉴一下。

Container 组成

Container的组成如下:

1.最里层的是child元素;
2.child元素首先会被padding包着;
3.然后添加额外的constraints限制;
4.最后添加margin。

Container 绘制过程如下:

首先会绘制transform效果;
接着绘制decoration;
然后绘制child;
最后绘制foregroundDecoration。

Container尺寸调节

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

Container包含的widget各自拥有自己的属性,但是其布局规则大致如下

对齐(alignment);
调节自身尺寸适合子节点;
采用width、height以及constraints布局;
扩展自身去适应父节点;
调节自身到足够小。

具体来说:

如果没有子节点、没有设置width、height以及constraints,并且父节点没有设置unbounded的限制,Container会将自身调整到足够小。

如果没有子节点、对齐方式(alignment),但是提供了width、height或者constraints,那么Container会根据自身以及父节点的限制,将自身调节到足够小。

如果没有子节点、width、height、constraints以及alignment,但是父节点提供了bounded限制,那么Container会按照父节点的限制,将自身调整到足够大。

如果有alignment,父节点提供了unbounded限制,那么Container将会调节自身尺寸来包住child;

如果有alignment,并且父节点提供了bounded限制,那么Container会将自身调整的足够大(在父节点的范围内),然后将child根据alignment调整位置;

含有child,但是没有width、height、constraints以及alignment,Container会将父节点的constraints传递给child,并且根据child调整自身。

如果没有子节点、对齐方式(alignment),但是提供了width、height或者constraints,那么Container会根据自身以及父节点的限制,将自身调节到足够小。

如果没有子节点、width、height、constraints以及alignment,但是父节点提供了bounded限制,那么Container会按照父节点的限制,将自身调整到足够大。

如果有alignment,父节点提供了unbounded限制,那么Container将会调节自身尺寸来包住child;

如果有alignment,并且父节点提供了bounded限制,那么Container会将自身调整的足够大(在父节点的范围内),然后将child根据alignment调整位置;

含有child,但是没有width、height、constraints以及alignment,Container会将父节点的constraints传递给child,并且根据child调整自身。

继承关系如下

Object > Diagnosticable > DiagnosticableTree > Widget > StatelessWidget > Container

Container的构造

其构造函数如下:

Container({Key key,this.alignment,this.padding,Color color,Decoration decoration,this.foregroundDecoration,double width,double height,BoxConstraints constraints,this.margin,this.transform,this.child,})

属性介绍:

  • key:Container唯一标识符,用于查找更新。
  • alignment:控制child的对齐方式,如果container或者container父节点尺寸大于child的尺寸,这个属性设置会起作用,有很多种对齐方式。
  • padding:decoration内部的空白区域,如果有child的话,child位于padding内部。padding 与margin的不同之处在于,padding是包含在content内,而margin则是外部边界,设置点击事件的话,padding区域会响应,而margin区域不会响应。
  • color:用来设置container背景色,如果foregroundDecoration设置的话,可能会遮盖color效果。
  • decoration:绘制在child后面的装饰,设置了decoration的话,就不能设置color属性,否则会报错,此时应该在decoration中进行颜色的设置。
  • foregroundDecoration:绘制在child前面的装饰。
  • width:container的宽度,设置为double.infinity可以强制在宽度上撑满,不设置,则根据child和父节点两者一起布局。
  • height:container的高度,设置为double.infinity可以强制在高度上撑满。
    constraints:添加到child上额外的约束条件。
  • margin:围绕在decoration和child之外的空白区域,不属于内容区域。
  • transform:设置container的变换矩阵,类型为Matrix4。
  • child:container中的内容widget。

举个栗子

new Container(constraints: new BoxConstraints.expand(height:Theme.of(context).textTheme.display1.fontSize * 1.1 + 200.0,),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://h.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=0d023672312ac65c67506e77cec29e27/9f2f070828381f30dea167bbad014c086e06f06c.jpg'),centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),),),padding: const EdgeInsets.all(8.0),alignment: Alignment.center,child: new Text('Hello World',style: Theme.of(context).textTheme.display1.copyWith(color: Colors.black)),transform: new Matrix4.rotationZ(0.3),
)

使用场景:
Container算是目前项目中,最经常用到的一个widget。在实际使用过程中,笔者在以下情况会使用到Container,当然并不是绝对的,也可以通过其他widget来实现。

  • 需要设置间隔(这种情况下,如果只是单纯的间隔,也可以通过Padding来实现);
  • 需要设置背景色;
  • 需要设置圆角或者边框的时候(ClipRRect也可以实现圆角效果);
  • 需要对齐(Align也可以实现);
  • 需要设置背景图片的时候(也可以使用Stack实现)。

今天就写到这里。

Flutter Container属性相关推荐

  1. Flutter Container、Center设置控件居中背景及其他属性

    Flutter Container.Center设置控件居中背景及其他属性 //控件可以居中Container(alignment: Alignment.bottomCenter,//设置控件内容的位 ...

  2. android 容器圆角,flutter Container容器实现圆角边框

    本文实例为大家分享了flutter Container容器实现圆角边框的具体代码,供大家参考,具体内容如下 在这里使用 Container 容器来实现圆角矩形边框效果 1 圆角矩形边框 Contain ...

  3. flutter TextField 属性详细分析

    flutter TextField 属性 简单的进行了归纳,有些是仅凭字面翻译. flutter TextField中的InputDecoration属性 TextField({Key key,thi ...

  4. flutter Container 的decoration 属性

    decoration: 背景装饰 decoration可以设置边框.背景色.背景图片.圆角等属性,非常实用.对于transform这个属性,一般有过其他平台开发经验的,都大致了解,这种变换,一般不是变 ...

  5. Flutter Container 容器以及对齐方式 Alignment

    Container 题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧. 目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒 [x1] ...

  6. Flutter Container 组件

    目录 参数详解 代码示例 效果图 完整代码 Container 官网简介:一个便利的小部件,结合了常见的绘画,定位和大小调整小部件. 其实就是一个容器组件,既然是容器,那么,就一定可以装很多东西,而C ...

  7. Flutter Container 参数详解

    1 基本内容 1.1 继续关系 Object > Diagnosticable > DiagnosticableTree > Widget > StatelessWidget ...

  8. Flutter PageView 属性使用详解

    PageView.builder({Key? key,this.scrollDirection = Axis.horizontal,this.reverse = false,PageControlle ...

  9. Flutter Container 设置最大最小宽高

    Container 设置最大 最小 宽高: 需要 添加 constraints 属性 constraints: constraints: BoxConstraints(maxWidth: 180, m ...

最新文章

  1. 利用numpy对像素点进行操作
  2. 【转】Java代码操作Redis的sentinel和Redis的集群Cluster操作
  3. 解决Caused by: java.lang.NoSuchMethodException: com.mchange.v2.c3p0.cfg.C3P0Config.init()的总结...
  4. 用户控件的定制和使用
  5. c与python的区别-c语言和python的区别是什么
  6. poj3687Labeling Balls
  7. 解决 WIndows,Linux 以及 MacOS 终端无法使用代理的问题
  8. python调用dll函数_关于从加载的DLL调用函数的Python基本问题
  9. 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂
  10. 工作中,我们经常用到哪些SQL语句呢?
  11. demo16 webpack 处理字体
  12. q函数表格怎么看_会计表格函数玩不会?送你会计表格函数公式大全,财务人都在用...
  13. qt中socket通信流程图_Qt学习 之 Socket通信
  14. 世界时区缩写及代表的地区
  15. 1.DingoApi安装和配置
  16. python 求特征值特征向量 numpy.linalg.eig()
  17. 教师python培训心得体会
  18. K2P padavan固件下宽带与IPTV融合
  19. 负载均衡负载场景和解决方案
  20. 小米TWRP格式化data无限重启变砖解决办法

热门文章

  1. 嵌入式计算机系统设计第四次实验报告
  2. [海绵城市]透水铺装、调蓄设施与控制指标关系整理
  3. ssm+JSP计算机毕业设计引航调度系统的设计与实现znw9b【源码、程序、数据库、部署】
  4. 人车混合机器人实现身体平衡功能
  5. 从今天开始坚持学JAVA,在B站找了千锋教育一千集的已经看了一百集了,初学者
  6. 基于51单片机智能光控制窗帘系统设计(毕设课设)
  7. 分享个人WordPress博客主题
  8. 小白学机器人伺服电机模块
  9. VDA6.5认证辅导,审核报告应当包含所有评估产品质量特性值的信息
  10. 房地产企业信息化建设