最近需要开发一个app,从文档,社区,时间方面斟酌了一下,最后还是决定用flutter,dart是flutter的主要开发语言,此文为dart学习总结。
阅读此文前最好有点java或者c#之类的基础
参考:https://codelabs.flutter-io.cn/codelabs/from-java-to-dart/#0
1.创建一个简单dart class
我们程序都会有一个主入口(跟java,c#类似),dart也一样,main函数是作为程序的启动入口。我们定义一个名为"Bicycle"的class,里面有会有3个属性,分为"cadence","speed","gear";
class Bicycle {
int cadence;
int speed;
int gear;
}
void main() {
}
假如是java或者c#,我们一般会在"class"或"void"关键字前加上public, private,protected修饰权限,假若不加,会默认为"private";但dart没有这些关键字,dart会默认为"public",如果我们需要用到private,后面将会介绍到‘read-only 变量’
2.定义构造函数
dart的构造函数是写成这个样子的:
Bicycle(this.cadence, this.speed, this.gear);
后面记得加分号";",不然你会收到一个编译错误,我们使用this关键字指向类的属性,这个写法其实就是相当于
Bicycle(int cadence, int speed, int gear) {
this.cadence = cadence;
this.speed = speed;
this.gear = gear;
}
3.创建实例
以前我们创建实例会用到new关键字
var bike = new Bicycle(2, 0, 1);
在dart里,new变成一个可选关键字,可用可不用(感觉好多东西简化了- -:)
var bike = Bicycle(2, 0, 1);
至此,我们先在我们目前的代码运行一下吧,我是用在线编译看效果:https://dartpad.cn/
class Bicycle {
int cadence;
int speed;
int gear;
Bicycle(this.cadence, this.speed, this.gear);
}
void main() {
var bike = Bicycle(2, 0, 1);
print(bike);
}
运行上面代码,我们应该能看到控制台输出[Instance of 'Bicycle' ]
注意到我们直接print的是bike实例,其实就是相当于我们java或c#的"object.ToString()"吧,直接把object print出来。
每一个dart类,其实都继承了一个toString方法的,我重写一下toString方法,让它输出我们想要格式:
@override
String toString() => 'Bicycle: $speed mph';
@override其实就是告诉编辑器我要改成你某个成员方法,至于箭头函数"=>"就是简写return 'Bicycle: $speed mph';
3.read-only变量
某些变量我们不想暴露出去让别人随便,在java或c#我们可以private修饰,在dart,我们则要把属性的名字,在开始处加一个"_",但同一个类库下还是可以被其他类访问,假如不同类库则不可以。
然后我们某些属性只希望它读取不能被修改,在java或c#我们会指定属性为get,在dart也类型。
我们现在把speed设置为私有,并提供一个可读取的变量:
int _speed = 0;
int get speed => _speed;
然后修改一下构造函数,把speed参数去掉
Bicycle(this.cadence, this.gear);
自己再加点方法,设置speed的值,完整代码如下:
class Bicycle {
int cadence;
int _speed = 0;
int get speed => _speed;
int gear;
Bicycle(this.cadence, this.gear);
void applyBrake(int decrement) {
_speed -= decrement;
}
void speedUp(int increment) {
_speed += increment;
}
@override
String toString() => 'Bicycle: $_speed mph';
}
void main() {
var bike = Bicycle(2, 1);
bike.speedUp(10);
print(bike);
}
可以看到输出是:Bicycle: 10 mph