变量
用 var 或者具体的类型来声明一个变量
当使用 var 定义变量时,表示类型是交由编译器推断决定的
未初始化的变量的值都是 null
常量
- const,表示变量在编译期间即能确定的值
- final 则不太一样,用它定义的变量可以在运行时确定值,而一旦确定后就不可再变
1 2 3 4 5 6 7 8 9 10
| final name = 'Andy'; const count = 3;
var x = 70; var y = 30; final z = x / y;
final time = new DateTime.now();
|
类型
numbers
- num
- int
- double
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int x = 123; int hex = 0xDEADBEEF;
double y = 1.199; double exponents = 1.42e5;
num z = 1.2
int one = int.parse('1');
double onePointOne = double.parse('1.1');
String oneAsString = 1.toString();
String piAsString = 3.14159.toStringAsFixed(2);
|
strings
Dart使用关键字String来表示字符串文字,字符串的值支持单引号或双引号方式。
1 2
| String s1 = 'Single quotes work well for string literals.'; String s2 = "Double quotes work just as well.";
|
使用带有单引号或双引号的三引号创建多行字符串。
1 2 3 4
| String s1 = ''' You can create multi-line strings like this one. ''';
|
可以使用${expression}将表达式的值放在字符串中。如果表达式是标识符,则可以跳过{}。
1 2 3 4 5 6 7 8 9 10
| String name = "王五"; String aStr = "hello,${name}"; print(aStr);
const int aConstNum = 0; const bool aConstBool = true; const String aConstString = 'a constant string';
const String constString = '$aConstNum $aConstBool $aConstString'; print(constString);
|
booleans
Dart中的布尔类型仅有false、true两个值,不能使用0、非0或者null、非null来表达false和true。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var fullName = ''; print(fullName.isEmpty);
var hitPoints = 0; print(hitPoints <= 0);
var unicorn; print(unicorn == null);
var iMeantToDoThis = 0 / 0; print(iMeantToDoThis.isNaN);
|
lists
在Dart中,数组是一个List对象。Dart中列表操作与JavaScript中的数组相似。
1 2 3 4
| List list = [1, 2, 3]; List<String> list2 = ['one', 'two', 'three'];
List constantList = const [1, 2, 3];
|
sets
Dart中的Set是无序的唯一项的集合
1 2 3 4 5
| var test = {'chlorine', 'bromine', 'iodine', 'astatine'}; Set elements = <String>{}; elements.add('hello'); elements.addAll(test); print(elements);
|
maps
1 2 3 4 5 6 7 8 9 10
| var gifts = { 'first': 'partridge', 'second': 'turtledoves', 'fifth': 'golden rings' };
|
runes
在Dart中,runes使用的是字符串的UTF-32代码点。Unicode为世界上所有书写系统中使用的每个字母,数字和符号定义唯一的数值。由于Dart字符串是UTF-16代码单元的序列,因此在字符串中表示32位Unicode值需要使用特殊语法。
在Dart中,String类有几个属性可用于提取runes信息。codeUnitAt和codeUnits属性返回16位代码单元。
1 2 3 4 5 6 7 8
| var clapping = '\u{1f44f}'; print(clapping); print(clapping.codeUnits); print(clapping.runes.toList());
Runes input = new Runes( '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}'); print(new String.fromCharCodes(input));
|
symbols
函数
1 2 3 4 5 6 7
| String getUserInfo(String name, String sex, [String from = '中国']) { var info = '$name 的性别是 $sex'; if (from != null && !from.isEmpty) { info = '$info 来自$from'; } return info; }
|
运算符
流程控制语句
异常处理
面向对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class User { String name; int age;
User(this.name, this.age);
User.fromJson(Map json) { name = json['name']; age = json['age']; } String say() { return '我是${name},今年${age}岁'; } }
|
泛型
异步支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import 'dart:io'; import 'dart:convert';
Future<String> get() async { HttpClient httpClient = new HttpClient(); Uri uri = new Uri.https( 'api.bilibili.com', '/x/space/acc/info', {'mid': '4543111'}); HttpClientRequest request = await httpClient.getUrl(uri); HttpClientResponse response = await request.close(); String responseBody = await response.transform(utf8.decoder).join(); httpClient.close(); return responseBody; } void main() async { try { final result = await get(); Map<String, dynamic> user = json.decode(result); print(user['data']['name']); } catch (e) { } }
|