经过几天的学习,对Flutter也有了初步的认识,在我看来,有java基础来学Flutter,首先还是要先看学下Dart语言,要不有些地方还是会很懵逼。
Dart语言
工欲善其事必先利其器,在正式要学习flutter之前,我们需要先了解一下Dart语言。
Dart语言可以看成是JAVA和JS的结合体。Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型等,而在动态特性方面又和JavaScript很像,如函数式特性、异步支持等。
除此之外,Dart也具有一些其它具有表现力的语法,如可选命名参数、..(级联运算符)和?.(条件成员访问运算符)以及??(判空赋值运算符)。
1.明确知道类型
可以直接用:
String a = "aaaa";
ClassA classA = new ClassA();
这种方式直接声明变量,和java基本上都一样
2.var
可以接受任何类型的值,但是一旦确定了类型,则不能更换类型,因此这点和js也略有不同,毕竟Dart语言是强类型语言。
var test = "aaa";
//test = 1;//编译不通过
3.dynamic
dynamic类似java中的Object,顾名思义,就是一个支持多类型的关键词,它与var的区别在于,它的类型是可以换的,
dynamic test = "aaa";
test = 1;//编译可以通过
4.final与const
这两个都有代表常量的意思,区别在于final修饰的变量,只能被赋值一次。而const的用法就比较奇妙了,用于声明变量,效果和final一样,而用于生成对象,效果又和new一样,但是这个对象里面的各种属性的值,就不能重新赋值了。const也只能用于构造函数里面的参数都是final的类。
还是举个栗子比较明了:
class Point{
final int x;
final int y;
const Point(this.x, this.y);
}
Point p = const Point(2, 3);//p的属性无法在改变。
final a = [1,2,3];
a.add(4);
print(a);//[1, 2, 3, 4]
//a = [2,3,4];//编译不通过
var b = const [1,2,3];
//b.add(4);//运行时报错,好奇为什么不在编译的时候就提示不通过呢
b = [1,2,3];//编译可通过
b.add(4);//编译可通过
print(b);//[1,2,3,4]
const c = const [1,2,3];
//c.add(4);//运行时出错
//c = [2,3,4];//编译时出错