根据官网编写第一个 Flutter 应用,来一步步学习它。
状态类
无非就是无状态类和有状态类(StatelessWidget 和 StatefulWidget)
StatelessWidget:从始至终状态不变。
StatefulWidget: 状态可能在widget生命周期中发生变化. 实现一个 stateful widget 至少需要两个类:
- 一个 StatefulWidget 类。
- 一个 State 类。StatefulWidget类本身是不变的,但是 State 类在 widget 生命周期中始终存在。
Material 和 Scaffold、Widget
- Material: 是一种标准的移动端和web端的视觉设计语言,Flutter提供了一套丰富的Material widgets。
- Scaffold: 是 Material library 中提供的一个widget, 它提供了默认的导航栏、标题和包含主屏幕widget树的body属性。
- widget: widget的主要工作是提供一个build()方法来描述如何根据其他较低级别的widget来显示自己。
变量声明
var:
var t;
t="hi world";
// 下面代码在dart中会报错,因为变量t的类型已经确定为String,
// 类型一旦确定后则不能再更改其类型。
t=1000;
上面的代码在JavaScript是没有问题的,前端开发者需要注意一下,之所以有此差异是因为Dart本身是一个强类型语言,任何变量都是有确定类型的,在Dart中,当用var
声明一个变量后,Dart在编译时会根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定,而JavaScript是纯粹的弱类型脚本语言,var只是变量的声明方式而已。
dynamic 和 Object
dynamic 和 Object 与 var 功能类似,都会在赋值时自动进行类型推断,不同在于,赋值后可以改变其类型,如:
dynamic t;
t="hi world";
//下面代码没有问题
t=1000;
Object
是 dart 所有对象的根基类,也就是说所有类型都是Object
的子类,所以任何类型的数据都可以赋值给Object
声明的对象,所以表现效果和dynamic
相似。
final 和 const
如果你从未打算更改一个变量,那么使用 final
或 const
,不是var
,也不是一个类型。 一个 final
变量只能被设置一次,两者区别在于:const
变量是一个编译时常量,final
变量在第一次使用时被初始化。被final
或者const
修饰的变量,变量类型可以省略,如:
//可以省略String这个类型声明
final str = "hi world";
//final String str = "hi world";
const str1 = "hi world";
//const String str1 = "hi world";