2020-11-03

Flutter 学习打卡

StatelessWidget, StatefullWidget

StatelessWidget 无状态widget

StatefullWidget 有状态widget

无状态 Widget, 一旦创建过后, 其状态不允许改动, 不可调用setState()刷新状态.(注: 只限制本身不可改变, 其父/子 widget 不会限制).

有状态 Widget, 创建过后, 可以通过setState()方法来改变其状态.

StatelessWidget 的实现

在需要实现一个StatelessWidget组件的时候,声明一个class类StateLessDemo需要通过extends继承StatelessWidget,然后实现build方法,就可以创建一个无状态的Widget。这个Widget创建完成后,Widget的状态就固定了,当前Widget就是一个无状态的,当前Widget
的内容固定,不可更改。

注意: 如果无状态Widget里面有子Widget,并且子Widget是有状态的,则子Widget的内容是可以通过setState来更改的。无状态Widget影响的仅仅是自己是无状态的,不回影响他的父Widget和子Widget。

无状态Widget是不能调用setState函数

StatefullWidget 的实现

StatefulWidget组件的实现相对于StatelessWidget来说,复杂那么一点点。首先也是要通过extends继承StatefulWidget,然后实现State createState()函数,实现createState的过程中,可以通过State来集成一个有状态的Widget。


Container 的decoration 属性

decoration可以设置边框、背景色、背景图片、圆角等属性,非常实用。对于transform这个属性,一般有过其他平台开发经验的,都大致了解,这种变换,一般不是变换的实际位置,而是变换的绘制效果,也就是说它的点击以及尺寸、间距等都是按照未变换前的。
但需要注意的是 deoration和 color: 背景颜色不能共存,二者同时只能有一个


Expanded

Expanded这个控件会把同级别的控件,在父控件中填充满整个父控件。

Expanded组件可以使Row、Column、Flex等子组件在其主轴方向上展开并填充可用空间(例如,Row在水平方向,Column在垂直方向)。如果多个子组件展开,可用空间会被其flex factor(表示扩展的速度、比例)分割。

Expanded组件必须用在Row、Column、Flex内,并且从Expanded到封装它的Row、Column、Flex的路径必须只包括StatelessWidgets或StatefulWidgets组件(不能是其他类型的组件,像RenderObjectWidget,它是渲染对象,不再改变尺寸了,因此Expanded不能放进RenderObjectWidget)。

注意一点:在Row中使用Expanded的时候,无法指定Expanded中的子组件的宽度width,但可以指定其高度height。同理,在Column中使用Expanded的时候,无法指定Expanded中的子组件的高度height,可以指定宽度width。


GridView, ListView

GridView 将 widgets 排列为可滚动的网格. 与iOS中CollectionView类似

ListView 将widget排列为可滚动列表, 与 tableView类似

你可能感兴趣的:(2020-11-03)