flutter底层通过Opengl绘制图形的UI的
flutter本质上是一套UI框架
flutter主要工作是提供一个build方法来描述如何构建UI界面
实际上widget只是用来描述UI的,真正的UI是Element
flutter通过StatefulWidget拥有状态,Stateless widget是不可变的
Scaffold 是 Material 库中提供的页面脚手架,它提供了默认的导航栏、标题和包含主屏幕widget树(后同“组件树”或“部件树”)的body属性
build()方法放在State(而不是StatefulWidget)中 ?这主要是为了提高开发的灵活性。如果将build()方法放在StatefulWidget中则会有两个问题:1.状态访问不便
Widget类继承自DiagnosticableTree,DiagnosticableTree即“诊断树”,主要作用是提供调试信息。
Key: 这个key属性类似于React/Vue中的key,主要的作用是决定是否在下一次build时复用旧的widget,决定的条件在canUpdate()方法中。
flutter包括一套android UI 库 material widget库 一套iOSUI库 cupertino widget库
如果状态是用户数据,如复选框的选中状态、滑块的位置,则该状态最好由父Widget管理。
如果状态是有关界面外观效果的,例如颜色、动画,那么状态最好由Widget本身来管理。
如果某一个状态是不同Widget共享的则最好由它们共同的父Widget管理。
内部类通常以下划线开头,所以一般State都采用下划线开头
命名参数中的必要参数要添加@required标注,这样有利于静态代码分析器进行检查。
在继承widget时,第一个参数通常应该是Key,另外,如果Widget需要接收子Widget,那么child或children参数通常应被放在参数列表的最后。同样是按照惯例,Widget的属性应尽可能的被声明为final,防止被意外改变。
每一个widget都会对应一个context对象(因为每一个widget都是widget树上的一个节点)。实际上,context是当前widget在widget树中位置中执行”相关操作“的一个句柄,比如它提供了从当前widget开始向上遍历widget树以及按照widget类型查找父级widget的方法。
当一个Stateful widget同时插入到widget树的多个位置时,Flutter framework就会调用该方法为每一个位置生成一个独立的State实例,其实,本质上就是一个StatefulElement对应一个State实例
Row 、 Column : 这些具有弹性空间的布局类Widget可让您在水平(Row)和垂直(Column)方向上创建灵活的布局。其设计是基于Web开发中的Flexbox布局模型。
Stack : 取代线性布局 (译者语:和Android中的FrameLayout相似),Stack 允许子 widget 堆叠, 你可以使用 Positioned 来定位他们相对于Stack的上下左右四条边的位置。Stacks是基于Web开发中的绝对定位(absolute positioning )布局模型设计的
Container : Container 可让您创建矩形视觉元素。container 可以装饰一个BoxDecoration , 如 background、一个边框、或者一个阴影。 Container 也可以具有边距(margins)、填充(padding)和应用于其大小的约束(constraints)。另外, Container 可以使用矩阵在三维空间中对其进行变换。