
No more than code.
scaffold(脚手架)
实现基本的 Material Design 可视化布局结构。Scaffold 类提供了很多的 Material 组件。
Flutter Widget 采用现代响应式框架构建,这是从 React 中获得的灵感,中心思想是用 widget 构建你的 UI。
Widget 描述了他们的视图在给定其当前配置和状态时应该看起来像什么。当 widget 的状态发生变化时,widget 会重新构建 UI,Flutter 会对比前后变化的不同, 以确定底层渲染树从一个状态转换到下一个状态所需的最小更改(译者语:类似于 React/Vue 中虚拟 DOM 的 diff 算法)。
runApp 函数接受给定的 Widget 并使其成为 widget 树的根。
(2)分类 StatelessWidget:无状态,比如标题栏中的标题 StatefulWidget:有状态,创建时需要指定一个 State ,在需要更新 UI 时调用 setState(VoidCallbackfn),并在 VoidCallback 中改变一些些变量数值等,组件会重新 build 以达到数显状态/UI 的效果。
管理状态的常见方法:
决定状态管理的原则:
(3)Widget 支持库 flutter 提供了一套丰富、强大的基础 widget ,在此基础上还提供了 Android 默认风格库: Material 与 IOS 风格库:Cupertino。
(4)基础 Widget
widget 中主要包含了组件的配置数据,但它并不代表最终绘制在屏幕上的显示元素,真正代表屏幕上显示元素的是 element,widget 是 element 的配置数据,一个 widget 可同时对应多个 element
每一个 StatefulWidget 类都会对应一个 State 类,State 表示与其对应的 StatefulWidget 要维护的状态,保存的状态信息可以在 build 时被获取,同时,在 widget 生命周期中可以被改变,改变发生时,可以调用其 setState() 方法通知 framework 发生改变,framework 会重新调用 build 方法重构 widget 树,最终完成更新 UI 的目的。
state 中包含两个常用属性:widget 和 context。widget 属性表示当前正在关联的 widget 实例,但关联关系可能会在 widget 重构时发生变化(framework 会动态设置 widget 属性为最新的 widget 对象)。context 属性是 buildContext 类的实例,表示构建 widget 的上下文,每个 widget 都有一个自己的 context 对象,它包含了查找、遍历当前 widget 树的方法。
State 的生命周期:
在 StatefulWidget 调用 createState 之后,框架将新的状态对象插入树中,然后调用状态对象的 initState。 子类化 State 可以重写 initState,以完成仅需要执行一次的工作。 例如,您可以重写 initState 以配置动画或订阅 platform services。initState 的实现中需要调用 super.initState。
当一个状态对象不再需要时,框架调用状态对象的 dispose。 您可以覆盖该 dispose 方法来执行清理工作。例如,您可以覆盖 dispose 取消定时器或取消订阅 platform services。 dispose 典型的实现是直接调用 super.dispose。
Flutter 中 Row 中不能直接使用 textfield 控件。需添加 expanded
报错: RangeError (index): Invalid value: Valid value range is empty: 0
解决:命令行执行 $ flutter clean