一、dart SDK:
二、Dart关键字
关键字 | |||
---|---|---|---|
abstract | dynamic | implements | show |
as | else | import | static |
assert | enum | in | super |
async | export | interface | switch |
await | extends | is | sync |
break | external | library | this |
case | factory | factory | factory |
catch | false | new | true |
class | class | null | try |
const | finally | on | typedef |
continue | for | operator | var |
covariant | Function | part | part |
default | get | rethrow | while |
deferred | hide | return | with |
do | if | set | set |
三、变量
变量声明使用var关键字,未初始化的变量的初始值为null,即便是数字类型的变量也是null。
如果对象不限于单一类型,可以指定Object或dynamic类型。
如果定义的变量不会变化,可以使用final或const来代替var,final变量只能设置一次。
const变量为编译时常量,如果const变量在类级别,可以使用static const。
const不仅仅用来定义常量,也可以使用const来创建常量的值。
四、 基本数据类型
Dart的基本数据类型包括:Number、String、Boolean、List、Set、Map、 Symbol、Runes。
4.1 number类型为两类:int、double。
4.2 String是 UTF-16 编码的字符序列。
可以使用单引号或者双引号来创建字符串
可以在字符串中使用表达式,用法是: ${expression}。如果表达式是一个标识符,可以省略 {}
var s = 'abc';
assert('$s' ==
'abc');
使用三个单引号或者三个双引号可以创建多行字符串对象
var s1 = '''
第一行
第二行
''';
4.3 bool:Dart是强bool类型检查,只有true对象才被认为是true
var name = 'abc';
if (name) {//编译不通过,name是字符串,不是bool类型
print('abc');
}
4.4 List的第一个元素的索引是0,最后一个元素的索引是 list.length - 1
4.5 Set是一组无序的集合
要创建一个空集,可以在{}前面带有类型参数:
var heros= <String> {};
使用add()或addAll()方法将条目添加到现有集中:
var heros = <String>{};
heros.add('石破天');
heros.addAll(hero);
4.6 Map
是一个键值对相关的对象,键和值可以是任何类型的对象,每个键都是唯一的,而一个值则可以出现多次
var player= {
// Keys Values
'1' : 'aaa',
'2': 'bbb',
'4' : 'ccc',
'8' : 'ddd',
'9' : 'eee'
};
var player = new Map();
player['1'] = 'aaa';
player['2'] = 'bbb';
player['4'] = 'ccc';
五、函数
5.1 可选命名参数
定义函数时,使用{param1, param2, …}的形式来指定命名参数:
coffeeFlavor ({bool sugar , bool sugar}) {
}
5.2 可选位置参数
把函数的参数放到 [] 中就变成可选位置参数了:
String go(String to, [String who]) {
var result = 'go to the $to';
if (who != null) {
result = '$result with $who';
}
return result;
}
5.3 默认参数值
可以使用 = 来定义可选参数的默认值, 默认值必须是编译时常量。 如果没有提供默认值,则默认值为 null。
String go(String to, [String who= 'abc']) {
var result = 'go to the $to';
if (who != null) {
result = '$result with $who';
}
return result;
}
String result= go ('beijing');
5.4 main函数
每个应用都需要有个顶级的main() 函数来作为入口才能执行。 main()函数的返回值为 void 并且有个可选的 List 参数
5.5 匿名函数
大部分函数都有名字,例如 main() 或者 printElement()。 可以创建没有名字的匿名方法,格式如下所示。
([[Type] param1[, …]]) {
codeBlock;
};
var list = ['张无忌', '风清扬', '张三丰', '独孤求败', '萧峰'];
list.forEach((i) {
print(list.indexOf(i).toString() + ': ' + i);
});
六、流程控制语句
和Java差不多
for-in形式的遍历:
var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
for (var h in list) {
print(h);
}
七、捕获异常
try {
//...
} on OutOfLlamasException {
//...
} on Exception catch (e) {
print('Unknown exception: $e');
} catch (e) {
print('Something really unknown: $e');
} finally {
//...
}
使用on或者catch来声明捕获语句,也可以同时使用。其中on来指定异常类型,catch来捕获异常对象。
七、多继承和引用库
7.1 多继承
Dart是面向对象编程语言,支持基于Mixin的继承机制。Mixin理解为多继承,在with关键字的后面为一个或者多个类
class A{}
class B{}
class C extends A with B{}
7.2 引用库 https://pub.flutter-io.cn/
使用import来引入一个库,内置库使用dart: scheme。 第三方的库使用文件系统路径或者 package: scheme。
import 'dart:io';
import 'package:mylib/mylib.dart';
import 'package:utils/utils.dart';
指定库前缀
如果导入的两个库具有冲突的名字, 可以使用库的前缀来进行区分。 例如,如果library1和library2 都有一个名字为Element的类,可以这样使用:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
Element element1 = new Element(); //使用lib1中的Element
lib2.Element element2 = new lib2.Element(); //使用lib2中的Element
导入库的一部分
如果只使用库的一部分功能,则可以选择需要导入的部分内容。其中show代表只导入指定的部分,hide代表除了指定的部分都导入。
import 'package:lib1/lib1.dart' show foo;// 只导入foo
import 'package:lib2/lib2.dart' hide foo;// 除了foo,其他部分都导入
延迟加载库
延迟加载意味着应用程序可以在需要的时候再加载库,使用延迟加载库的场景主要有以下几点:
- 减少APP的初始启动时间。
- 执行A/B测试,例如尝试各种算法的不同实现。
- 加载很少使用的功能。
要延迟加载一个库,需要先使用 eferred as来导入:
import 'package:deferred/hello.dart' deferred as hello;
当需要使用的时候,调用loadLibrary() 函数来加载库:
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
八、异步支持
Dart库中包含许多返回Future或Stream对象的函数。这些函数是异步的,它们在基本操作后会返回,而不等待该操作完成
要使用await,其方法必须带有async关键字:
FileOperate() async {
var file= await readFile()
//其他处理
}
九、类可调用
如果Dart中的类实现了call()函数,那么这个类可以当做方法来调用。
class JointFunction {
call(String a, String b, String c, String d) => '$a $b $c $d';
}
main() {
var jf = new JointFunction();
var out = jf("放","手","去","做");//此处调用
print('$out');
}
创建实例
在Java中创建实例可以用new,在Dart中你可以选择用new,也可以选择不用
Element element = Element();