前面我们已经安装了Flutter的开发环境,并运行了Flutter的hello_world的样例。本篇介绍一下Dart语言开发环境的安装和配置。
Dart也是谷歌开发的一门用于前端开发的语言(当然也支持服务器端),据说最初的目的是想取代JavaScript,后来Flutter的开发语言成了Dart。
因此,学习Flutter的第一步是先学一下Dart语言开发。(ps: 前端开发的Dart + 后端开发的Go,不难看出Google的布局)。
如果在学习Dart之前如果已经熟悉Java、Go、Groovy等编程语言的话,对于快速学习Dart的语法和一些基本特性,只需要花一个小时的时间阅读以下Dart官方的 Dart语法预览文档即可,感觉Dart在语法上融合了众语言的特性,提供了很多语法糖,因此可能会觉得有点’杂’。
1.Dart SDK安装
brew tap dart-lang/dart
brew install dart
dart --version
Dart VM version: 2.4.0 (Wed Jun 19 11:53:45 2019 +0200) on "macos_x64"2.VS Code安装Dart Code插件
在VS Code中安装Dart Code插件
3.Dart语言快速浏览
3.1 Hello Dart
hello.dart:
void main() {
sayHello("Dart");
}
void sayHello(lang) => print('hello $lang');运行:
dart hello.dart3.2 内置类型
Dart内置了几种常用类型,分别是String, int, double, bool, List, Map,看下面的代码例子:
void main() {
var name = 'Voyager I';
var year = 1977;
var antennaDiameter = 3.7;
var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
var image = {
'tags': ['saturn'],
'url': '//path/to/saturn.jpg'
};
if (year >= 2001) {
print('21st century');
} else if (year >= 1901) {
print('20th century');
}
for (var object in flybyObjects) {
print(object);
}
for (int month = 1; month <= 12; month++) {
print(month);
}
while (year < 2016) {
year += 1;
}
print(antennaDiameter.round());
print(name);
print(image);
}3.3 函数
int fibonacci(int n) {
if (n == 0 || n == 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
void main() {
var result = fibonacci(20);
print(result);
}只有一个语句的方法可以写成类似箭头函数风格:
var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
flybyObjects.where((name) => name.contains("anus")).forEach(print);
void sayHello(String lang) => print('hello ' + lang);
sayHello("Dart");3.4 类
class Spacecraft {
String name;
DateTime launchDate;
int lautchYear;
// Constructor, including syntactic sugar for assignment to members.
Spacecraft(this.name, this.launchDate) {
lautchYear = launchDate?.year;
}
// Named constructor that forwards to the default one.
Spacecraft.unlaunched(String name) : this(name, null);
// Method
void describe() => print('Spacecraft: $name, $lautchYear');
}
void main() {
var voyager = new Spacecraft('Voyager I', new DateTime(1977, 9, 5));
voyager.describe();
}3.5 Inheritance 和 Mixins
class Orbiter extends Spacecraft {
num altitude;
Orbiter(String name, DateTime launchDate, this.altitude)
: super(name, launchDate);
}
class Manned {
int astronauts;
void describeCrew() {
print('Number of astronauts: $astronauts');
}
}
class Orbiter extends Spacecraft with Manned {
// ...
}3.6 Interface
Dart 没有 interface 关键字。在 Dart 中所有的类都隐含的定义了一个接口。因此你可以使用 implement 来实现任意的类隐含定义的接口。
class MockSpaceship implements Spacecraft {
// ...
}更多可查看Dart文档中的示例代码