Dart 速查表
最后更新
Hello World 与程序结构
每个 Dart 程序都从顶层的 main 函数开始。
| 操作 | 语法 |
|---|---|
| 入口点 | void main() { ... } |
| 输出一行 | print("Hello, World!"); |
| 字符串插值 | print("Hi $name"); |
| 在插值中使用表达式 | print("Sum: ${a + b}"); |
| 注释 | // this is a comment |
| 多行注释 | /* ... */ |
| 导入库 | import 'dart:math'; |
| 运行文件 | dart run main.dart |
变量与类型
Dart 是静态类型语言,但可以用 var 推断类型。
| 操作 | 语法 |
|---|---|
| 类型推断的变量 | var age = 30; |
| 显式类型 | int age = 30; |
| 编译期常量 | const pi = 3.14; |
| 运行期常量 | final name = getName(); |
| 基本类型 | int, double, String, bool |
| 动态类型 | dynamic x = 5; |
| 类型转换 | int.parse("42"), n.toString() |
| 检查类型 | x is String, x as String |
空安全
类型默认不可为空;加上 ? 才允许为 null。
| 操作 | 语法 |
|---|---|
| 不可空(默认) | int count = 0; |
| 可空类型 | String? name; |
| 空感知访问 | user?.name |
| 空合并 | name ?? "default" |
| 空合并赋值 | name ??= "default"; |
| 断言非空 | name! |
| 延迟初始化 | late String value; |
| 空感知展开 | [...?maybeList] |
字符串
字符串可以用单引号、双引号和三引号。
| 操作 | 语法 |
|---|---|
| 长度 | s.length |
| 转大写 / 小写 | s.toUpperCase(), s.toLowerCase() |
| 插值 | "Total: $price" |
| 拼接 | "foo" + "bar" |
| 是否包含 | s.contains("ell") |
| 以某内容开头 / 结尾 | s.startsWith("he") |
| 分割 | "a,b,c".split(",") |
| 替换 | s.replaceAll("a", "b") |
| 截取子串 | s.substring(0, 3) |
| 去除首尾空白 | s.trim() |
集合(List、Map、Set)
三种核心集合类型,都有字面量写法。
| 操作 | 语法 |
|---|---|
| List 字面量 | var nums = [1, 2, 3]; |
| 向列表添加元素 | nums.add(4); |
| 访问 / 长度 | nums[0], nums.length |
| Map / where | nums.map((n) => n * 2), nums.where((n) => n > 1) |
| Map 字面量 | var ages = {"Ada": 30}; |
| 访问 Map | ages["Ada"] |
| Set 字面量 | var ids = {1, 2, 3}; |
| 展开运算符 | var all = [...a, ...b]; |
| 集合中的 if / for | [if (show) 1, for (n in xs) n] |
流程控制
条件写在圆括号里;switch 支持模式匹配。
| 操作 | 语法 |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| 三元运算符 | var r = x > 0 ? "pos" : "neg"; |
| Switch | switch (n) { case 1: ...; default: ... } |
| for 循环 | for (var i = 0; i < 10; i++) { ... } |
| for-in 循环 | for (var item in items) { ... } |
| forEach | items.forEach((x) => print(x)); |
| while 循环 | while (x < 100) { ... } |
| Do-while | do { ... } while (x < 100); |
| Break / continue | break;, continue; |
函数
函数是一等公民;箭头语法可以简写只有一个表达式的函数。
| 操作 | 语法 |
|---|---|
| 定义函数 | int add(int a, int b) { return a + b; } |
| 箭头函数 | int square(int x) => x * x; |
| 可选位置参数 | void log(String m, [int? code]) { ... } |
| 命名参数 | void box({int w = 0, int h = 0}) { ... } |
| 必填命名参数 | void box({required int w}) { ... } |
| 匿名函数 | var f = (x) => x * 2; |
| 作为参数传递 | nums.map((n) => n * 2) |
| Typedef | typedef IntOp = int Function(int); |
类与构造函数
类保存状态和行为;构造函数有好几种写法。
| 操作 | 语法 |
|---|---|
| 定义类 | class Point { int x; int y; } |
| 构造函数 | Point(this.x, this.y); |
| 命名构造函数 | Point.origin() : x = 0, y = 0; |
| 创建实例 | var p = Point(1, 2); |
| 方法 | double dist() { ... } |
| Getter | int get area => w * h; |
| 继承 | class Circle extends Shape { ... } |
| 调用父类构造函数 | super(args) |
| 抽象类 | abstract class Shape { ... } |
| 实现接口 | class Dog implements Animal { ... } |
异步(Future / async-await)
Future 表示稍后才能拿到的值;await 会暂停执行,直到它完成。
| 操作 | 语法 |
|---|---|
| 异步函数 | Future<int> load() async { ... } |
| 等待 Future | var data = await load(); |
| 返回值 | 在 async 函数中写 return 42; |
| 延迟 | await Future.delayed(Duration(seconds: 1)); |
| 处理错误 | try { await load(); } catch (e) { ... } |
| 用 then 链式调用 | load().then((v) => print(v)); |
| 并行运行 | await Future.wait([a(), b()]); |
| 异步 Stream | await for (var x in stream) { ... } |
最常用的 Dart 语法,全都在这一页。这份 Dart 速查表是核心语言的快速参考:变量和类型、空安全、字符串、集合、流程控制、函数、类,以及编写 Flutter 应用时用到的 Future 和 async/await。
这里的内容都是标准 Dart,可以在官方 SDK 上运行。需要什么就复制什么,也可以在 Dart 在线编辑器里直接运行每个代码片段,无需安装。
Dart 速查表常见问题
这份 Dart 速查表免费吗?
免费。这份 Dart 速查表完全免费,无需注册。把它加入书签,需要查空安全运算符、集合方法或异步写法时随时回来看。
Dart 的空安全是怎么工作的?
int count 永远不能是 null。要允许 null,就加一个 ?(String? name),编译器会强制你处理为空的情况。几个运算符让这件事很简洁:?. 用于空感知访问,?? 提供备用值,! 在你确定值不为空时断言它非空。这样,空值错误会在编译时被发现,而不是等到运行时。Future 是什么?async 和 await 是怎么工作的?
Future 表示一个稍后才能拿到的值,比如网络请求的结果。把函数标记为 async 后就能使用 await,它会暂停执行,直到 Future 完成再把值交给你。这样写出来的异步代码可以像同步代码一样从上往下读。用 try/catch 包住 await 来处理错误。可以在线练习 Dart 吗?
可以。打开 Dart 在线编辑器,就能在浏览器里运行这份速查表中的任意代码片段,无需安装 SDK。想系统地学,Coddy 免费的交互式 Dart 课程会带你一步步从空安全和集合学到类和 async/await。
这份速查表适合初学者吗?
适合。内容从最常用的主题(变量、空安全、流程控制)排到进阶主题(类、Future、async/await),第一天就能用上前面的部分,再慢慢掌握其余内容。