变量声明

var

类似JS中的var,可以接收任何类型变量,但是Dart中的var变量一旦赋值,类型就会确定,且不能再改变其类型,因为Dart是强类型语言

dynamic和Object

Object是Dart中所有对象的根基类,即所有类型都是Object的子类(包括Function和Null),所以任何类型数据都可以赋值给Object声明的对象。
dynamic和var一样是声明关键词,声明的变量可以赋值任何对象。
两者相同之处在于,声明的变量可以在后期改变赋值类型
不同之处在于,dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用Object的属性和方法,否则编译器会报错

dynamic a;
 Object b;
 main() {
     a = "";
     b = "";
     printLengths();
 }   

 printLengths() {
     // no warning
     print(a.length);
     // warning:
     // The getter 'length' is not defined for the class 'Object'
     print(b.length);
 }

dynamic的这个特性与Objective-C中的id作用很像,因此在使用时注意不要引入运行时错误

final和const

如果打算不更改某个对象,
final变量只能被设置一次,
const变量是一个编译时常量,final变量在第一次使用时被初始化
finalconst修饰的变量 ,变量类型可以省略

//可以省略String这个类型声明
final str = "hi world";
//final String str = "hi world"; 
const str1 = "hi world";
//const String str1 = "hi world";