设为首页 加入收藏

TOP

Flutter 布局控件完结篇(一)
2019-09-01 23:15:07 】 浏览:53
Tags:Flutter 布局 控件 完结

本文对Flutter的29种布局控件进行了总结分类,讲解一些布局上的优化策略,以及面对具体的布局时,如何去选择控件。

1. 系列文章

  1. Flutter 布局详解
  2. Flutter 布局(一)- Container详解
  3. Flutter 布局(二)- Padding、Align、Center详解
  4. Flutter 布局(三)- FittedBox、AspectRatio、ConstrainedBox详解
  5. Flutter 布局(四)- Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
  6. Flutter 布局(五)- LimitedBox、Offstage、OverflowBox、SizedBox详解
  7. Flutter 布局(六)- SizedOverflowBox、Transform、CustomSingleChildLayout详解
  8. Flutter 布局(七)- Row、Column详解
  9. Flutter 布局(八)- Stack、IndexedStack、GridView详解
  10. Flutter 布局(九)- Flow、Table、Wrap详解
  11. Flutter 布局(十)- ListBody、ListView、CustomMultiChildLayout详解

1.1 乱侃

前前后后也算是拖拖拉拉的写了一些Flutter的文章,写的也都比较粗略。最近工作调动,内部换了部门,一顿瞎忙活,也打乱了原本的分享计划。

从我最开始接触Flutter到现在,差不多四个多月了。在这段时间里面,Flutter也发布了Release Preview版本。各个技术网站本着先拨头筹的心态,推广了几波,国内的人气跟着也起来了不少。全世界Flutter开发人员中,国内从业者占据了很大的比重,这个现象本身并不能说明什么,不过可以反映一点,有商业诉求吧。当然观望的还是占绝大部分,除了一些个人开发者爱折腾外,也就是一些大的业务成熟到不能再成熟的团队,内部消化人员去折腾这个了。

插个题外话,有感于最近的工作变动,这段时间胡思乱想的比较多。一门技术对程序员来说到底意味着什么?如果不需要再为生计奔波,是否还会对目前已上手的技术感兴趣?如果你现在的项目所需要的技术,对你个人而言毫无加成,只会浪费你的时间,让你在已有的技术栈上渐行渐远,你是否还会参与这个项目。只有极少数人会遇上逆天改命的项目,不管参与什么项目,技术人员的立身之本始终是技术(高管或者打算换行的除外),技术的选型,除去时间效率后续维护等普适性的考虑要素外,排在第一位的始终应该是对自身的提高,扯的有些远了哈。

1.2 本质

我数了一下我文章总结过的布局控件,总共有29种。乍看会觉得真鸡毛的多,不乍看,也会觉得鸡毛的真多。为什么其他的移动平台没有这么多布局控件呢?其实不然,其他平台没有这么细分。

以Android平台为例,最基础的几种布局例如LinearLayout、RelativeLayout、ConstraintLayout等等。很多Flutter的控件,对于Android来说,仅仅是一个属性的设置问题。

再往上看,iOS、Android、Web这些平台的布局,其实最基本就那几种,线性布局、绝对布局、相对布局等等。Flutter也逃不出这些,那为什么Flutter现在有这么多布局控件呢?

  • 第一点,之前文章介绍过的,Flutter的理念是万物皆为widget。这和Flutter的实现机制有关,而不是因为它在布局上有什么特殊性,这也是最主要的一点。

  • 第二点,我觉得是因为这是Flutter的初期,如果有经历过一个技术的完整发展周期,就会明白,前期只是提供各种零件,只有商业支撑或者人员支撑足够的时候,才会去优化零件。而现在就是这么一种资源不足的状态。各种组件可以合并的有很多,底层的实现机制不会变,只是再加一层即可,这也是可以造轮子的地方,例如封装一套适用于Android、iOS或者Web人员的控件库等。

  • 第三点,跟初期相关,一套新的技术,各种东西不可能一下子全想明白,路总是走着走着才发现走歪了,就像一些控件,可能一些地方合适,但是一些新的地方又不太合适,所以就再造一个,所以有些控件看起来功能十分相似。

说了这么多,我其实就想说明一点,Flutter现在还只是处在社会发展的初级阶段,还处在温饱问题都解决不了的状态,想达到小康还需要很长的一段路要走。

2. 单节点控件

单节点控件,顾名思义就是只有一个节点的布局控件。这种控件有多少个呢,我之前文章总结过的有18种,现阶段还是不排除增加的可能,哈哈。

2.1 分类

在这小节里,我尝试从多个维度去对这些控件进行分类,希望这样可以帮助大家理解。

2.1.1 按照继承划分

Flutter单节点布局控件继承分类

上面是这18种控件的父节点层面的继承关系,唯一不同的一个控件就是Container。所以按照是否继承自SingleChildRenderObjectWidget的分类如下:

  • 继承自StatelessWidget的控件,有Container。
  • 继承自SingleChildRenderObjectWidget的控件,有Padding、Align、Center、FittedBox、AspectRatio、ConstrainedBox、Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth、LimitedBox、Offstage、OverflowBox、SizedBox、SizedOverflowBox、Transform、CustomSingleChildLayout。

Container是一个组合控件,不是一个基础控件,这点从继承关系就可以看出来。

2.1.2 按照功能是否单一划分

分类如下:

  • 功能不单一的控件,Container、Transform、FittedBox、SizedOverflowBox。
  • 功能单一的控件,有Padding、Align、Center、AspectRatio、ConstrainedBox、Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth、LimitedBox、Offstage、OverflowBox、SizedBox、CustomSingleChildLayout。

先在此处小结一下,可以看出Container的特殊之处了吧,为什么Container这么特殊了。这个特殊要从两个层面去看。

  • 对于Flutter而言,Container是特殊的,因为它不是功能单一的控件,是一个组合的控件,所以它相对于Flutter是特殊的。
  • 对于移动端开发者而言,它不是特殊的,因为很多UI都是一些基础功能组合的,这样能让开发者更方便的使用。

那能得出什么结论呢?我个人觉得,Container这种组合的控件会越来越多,也会有个人开发者去开发这种通用型的组合控件,这是一个大趋势,是Flutter走向易用的一小步。

2.1.3 按照功能划分

在此处我按照定位、尺寸、绘制三部分来尝试着去做功能的划分,当然这个划分并不绝对,仁者见仁吧。

  • 定位控件:Container、Align、Center、FittedBox、
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇AS插件-GsonFormat 下一篇Android破解学习之路(十)—— ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目