根据官网编写第一个 Flutter 应用,来一步步学习它。


状态类

无非就是无状态类和有状态类(StatelessWidgetStatefulWidget
StatelessWidget:从始至终状态不变。
StatefulWidget: 状态可能在widget生命周期中发生变化. 实现一个 stateful widget 至少需要两个类:

  1. 一个 StatefulWidget 类。
  2. 一个 State 类。StatefulWidget类本身是不变的,但是 State 类在 widget 生命周期中始终存在。


Material 和 Scaffold、Widget

  • Material: 是一种标准的移动端和web端的视觉设计语言,Flutter提供了一套丰富的Material widgets。
  • Scaffold: 是 Material library 中提供的一个widget, 它提供了默认的导航栏、标题和包含主屏幕widget树的body属性。
  • widget: widget的主要工作是提供一个build()方法来描述如何根据其他较低级别的widget来显示自己。

变量声明

var:
  1. var t;
  2. t="hi world";
  3. // 下面代码在dart中会报错,因为变量t的类型已经确定为String,
  4. // 类型一旦确定后则不能再更改其类型。
  5. t=1000;

上面的代码在JavaScript是没有问题的,前端开发者需要注意一下,之所以有此差异是因为Dart本身是一个强类型语言,任何变量都是有确定类型的,在Dart中,当用var声明一个变量后,Dart在编译时会根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定,而JavaScript是纯粹的弱类型脚本语言,var只是变量的声明方式而已。

dynamic 和 Object

dynamic 和 Object 与 var 功能类似,都会在赋值时自动进行类型推断,不同在于,赋值后可以改变其类型,如:

  1. dynamic t;
  2. t="hi world";
  3. //下面代码没有问题
  4. t=1000;

Object 是 dart 所有对象的根基类,也就是说所有类型都是Object的子类,所以任何类型的数据都可以赋值给Object声明的对象,所以表现效果和dynamic相似。

final 和 const

如果你从未打算更改一个变量,那么使用 finalconst,不是var,也不是一个类型。 一个 final变量只能被设置一次,两者区别在于:const 变量是一个编译时常量,final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略,如:

  1. //可以省略String这个类型声明
  2. final str = "hi world";
  3. //final String str = "hi world";
  4. const str1 = "hi world";
  5. //const String str1 = "hi world";