Flutter 自带有一套强大的 Basic widgets,其中以下是经常用的:
许多 widgets 在 MaterialApp 中呈现,是为了继承它的主题相关参数以统一设计风格。所以我们使用 MaterialApp。
Text: Text widget 可以在你的应用中创建一个可自定义风格的文本框。
Row, Column: 这两个 widgets 使你无论是在水平(Row) 还是在垂直位置 (Column) 都可以创建出灵活的布局,它是基于 flexbox layout model 来设计的。
Stack:你可以使用 Stack widget 来绘制需要重叠的 widget、元素,而不是安照线性方向(垂直或者水平)来布局 widget、元素。你可以在 Stack 上使用 Positioned 定位相对设置其子元素上下左右的参数。Stacks 基于网页 positioning layout model。
Container: Container 可以创建出简单的矩形元素视图。也可当做 BoxDecoration 自定义风格的容器,例如:背景,边框,阴影。 Container 可以设置 margin、padding 甚至设置任意大小尺寸。 另外 Container 可以利用矩阵在三维空间中编辑。
使用 Expanded 创建 title widget,因为它可以自动填充其他子 widget 未使用的剩余空间。当然可以使用多个 Expanded 对象,并且可以使用 flex 参数来设置可用空间的比例。
Navigator,他管理一些以字符串为标识的 widgets,也可以称为”路由”,它可以帮你管理应用程序界面,使之不同的界面直接跳转平稳可控。
你可能想知道为什么我们把 StatefulWidget 和 State 分离为单独的对象。在 Flutter 中,这两种类型的对象具有着不同的生命周期。Widgets 只是用于在界面显示当前信息的临时对象。State objects 用来保存一些状态信息,会一直存在与 build() 来回调用。
在 Flutter 中,widget 的更改变化是通过回调方式一层一层“向上”传递,而当前状态则“向下”传递到stateless widgets。
widget 的生命周期
主要文章:State
在 StatefulWidget 调用 createState 后,框架会插入新的 state object 在节点树中,然后在调用 initState 在此对象上。子类 State 可以复写initState 并且只会调用一次。例如,你可以复写 initState 以配置动画或订阅平台服务。 initState 实现之前,需要先调用 super.initState。
当一个 state object 不再需要时,框架调用 state object 的 dispose 函数时,你可以复写该 dispose 函数来执行清理工作。例如,你可以复写dispose 来取消定时器或取消平台订阅服务。当然调用 dispose 之前,要先调用 super.dispose。