Skip to content

参考:Dart 类型系统、异步 API 与易错点速查

基于 Dart 3.x(2026 主线) · 核于 2026-08

速查

  • 变量声明三档var(推断可变)、final(单次赋值、运行时)、const(编译时常量、深度不可变)。
  • 一切皆对象:数字是 int/double 对象(无原始类型);Object 是非空根,Object? 含 null;dynamic 关闭类型检查。
  • 类型系统num(int/double 父)、Stringbool(严格,无 truthy)、List<T>Map<K,V>Set<T>
  • 空安全T/T? 二分(健全,全依赖图);工具 ?./??/!/?[]late(延迟初始化)、required(强制命名参数)。
  • 命名参数{} 包裹(默认可选),required 强制;位置参数 [];默认值 =
  • 集合 if/for:List/Map/Set 字面量内 if (cond) x / for (var x in list) x;扩展运算符 ... / ...?
  • Cascadeobj..m()..f = x 连续操作同一对象。
  • AOT/JIT 双模式:开发 JIT + 热重载(亚秒级),发布 AOT(性能近原生)。
  • 异步Future<T>(≈Promise)、Stream<T>(≈异步迭代器/Observable)、async/await(与 JS 一致)、async*/yield(生成 Stream)、await for(消费 Stream)。
  • Isolate:无共享内存的消息传递并发;Isolate.run(2.15+ 简化)、compute(Flutter 封装)。
  • :单继承 + mixin(with)+ implements(所有类隐式接口);构造简写 User(this.name)、命名构造、factory 工厂;增强 enum(2.17+)。

一、类型系统速查

类型含义对应 JS
int / double整数 / 浮点(num 子类)number
num数字父类(接受 int/double)number
String字符串(单双引号等价)string
bool严格布尔(无 truthy/falsy)boolean
List<T>列表(有序、可重复)Array
Map<K,V>映射(键值对)Object / Map
Set<T>集合(无序、不重复)Set
Object所有非空类型的根Object
Object?含 null 的根——
dynamic关闭类型检查any(运行时)
void无返回值void
Never不可达(抛异常/无限循环)never(TS)

二、变量声明速查

声明语义何时用
var x = ...类型推断、可变局部变量,类型明显
final x = ...单次赋值、运行时确定不变的运行时值(如 DateTime.now()
const x = ...编译时常量、深度不可变编译期已知的常量(Flutter const Widget)
Type x = ...显式类型公共 API、需明确类型时
late Type x延迟初始化非空构造时无法确定、使用前必填
late final x = ...懒加载(首次访问才计算)昂贵计算的缓存

三、空安全操作符速查

写法含义null 行为
T x非空类型赋 null 编译错误
T? x可空类型可承载 null
a?.b安全调用a 为 null 时返回 null
a ?? default空合null 时用 default
a!非空断言null 抛异常
a?[i]安全索引a 为 null 时返回 null
late T x延迟初始化访问前未初始化抛 LateInitializationError
required T x命名参数强制传入调用方必传

四、异步 API 速查

Future(单值,≈Promise)

API含义JS 对应
Future<T>异步结果类型Promise<T>
Future.value(x)已完成的 FuturePromise.resolve(x)
Future.error(e)已出错的 FuturePromise.reject(e)
Future.wait([...])等所有完成Promise.all
Future.any([...])任一完成Promise.any
Future.delayed(d, fn)延迟后执行setTimeout + resolve
.then(fn) / .catchError(fn)链式.then / .catch
async / await异步函数async / await

Stream(多值,≈异步迭代器/Observable)

API含义
Stream<T> fn() async*生成 Stream(用 yield)
yield x / yield* other生产值 / 展开另一 Stream
await for (var x in stream)消费 Stream
.listen(onData)订阅(返回 StreamSubscription)
.map / .where / .transform操作符(类似 RxJS)
.asBroadcastStream()单订阅转广播
StreamController手动控制 Stream(add/close)
StreamController.broadcast()广播 Stream(多消费者)

Isolate(并发)

API含义
Isolate.run(fn)启动 worker 执行并返回结果(2.15+)
Isolate.spawn(entry, message)启动 Isolate(低级 API)
SendPort / ReceivePort端口(消息收发)
compute(fn, arg)(Flutter)Isolate.run 的便利封装

五、Flutter Widget 语言基础速查

概念含义React 对照
Widget不可变 UI 描述元素描述
StatelessWidget无状态组件函数组件
StatefulWidget + State有状态组件class 组件
build(BuildContext)描述 UIrender
setState(() { })触发重建setState
BuildContext树中位置句柄context(更强)
const Widget编译期单例(性能)——
InheritedWidget向后代广播Context.Provider
Key(key 参数)控制复用与重排key

六、与 JS/TS / Swift / Kotlin 对比

维度DartJS / TSSwiftKotlin
变量声明var/final/const 三档let/constvar/letvar/val
空安全健全(全依赖图)TS 擦除Optional 枚举T/T?(平台类型逃逸)
数字int/double/numnumber(全 double)Int/DoubleInt/Double
相等== 结构相等=== 严格== 结构== 结构
异步Future/Stream + asyncPromise/async iterasync/await协程/Flow
内存GC(分代)GCARCJVM GC
编译AOT + JIT 双模式解释 + JITAOTJVM 字节码
主要用途Flutter 跨平台Web/NodeiOS/macOSAndroid/JVM

七、易错点清单

  • 「Dart 类型与 TS 一样会擦除」:错。Dart 类型在运行时仍有效(尤其 AOT 模式),TS 类型完全擦除。
  • final 等于 const:错。final 是运行时单次赋值(值可运行时确定),const 是编译时常量(深度不可变,对象图编译期固定)。
  • dynamic 等于 Object:错。dynamic 关闭类型检查(任意方法调用都通过),Object 是强类型根(只有 Object 方法可调)。
  • 「Dart 有 truthy/falsy」:错。条件必须是 boolif (1)if ('') 编译错误(无 JS 的隐式转换)。
  • 「健全空安全就是 T/T? 二分」:部分对。健全性要求整个依赖图全空安全(一个未迁移库会阻止 sound 模式),不只是语法二分。
  • late 是安全的」:错。访问前未初始化会抛 LateInitializationError,需谨慎。
  • 「Future 就是 Promise 完全等价」:API 高度相似但非完全等价(如错误处理细节、Future.wait 的错误行为与 Promise.all 略有差异)。
  • 「Stream 默认多消费者」:错。默认是单订阅 Stream(一个消费者),广播需 .asBroadcastStream()StreamController.broadcast()
  • 「Isolate 是线程」:错。Isolate 无共享内存(独立堆),靠消息传递,与共享内存线程不同,避免锁。
  • 「热重载会重置状态」:错。热重载(r)保留 State,热重启(R)才重置。
  • 「const Widget 只是风格选择」:错。const Widget 让框架复用实例、跳过重建,是性能优化关键(Flutter 中能用 const 必用)。
  • 「Dart 的 == 与 JS 一样需 ===:错。Dart == 已是结构相等(调 == 操作符),无 JS 的隐式转换问题,不需 ===

八、进阶方向(链接其他叶)

  • Swift —— iOS 原生语言,对比声明式 UI 的不同实现(SwiftUI vs Flutter)
  • Kotlin —— Android 原生语言,对比(Compose vs Flutter)
  • Flutter —— 使用 Dart 的跨平台框架详述

权威链接