下面是一份 超详细、系统化、入门到进阶 的 Flutter Dart 语法解析,可以当作一篇“Dart 语言速通 + 深入机制”的教程来阅读(对 Flutter 开发非常友好)。


🚀 Flutter 开发者的 Dart 语法全解析(2025 最新)

Dart 是 Flutter 使用的核心语言,它既吸收了 Java / JavaScript / Swift / Kotlin 的优点,又加入了强类型 + JIT & AOT + Null Safety 等特性。本解析从基础到进阶,一步步讲清楚 Dart 的语法体系。


目录

  1. Dart 的特点

  2. 基础语法

  3. 变量 & 类型系统(含 Null Safety)

  4. 函数(Function / Lambda / 可选参数)

  5. 类与对象(class / 构造函数 / 继承 / mixin)

  6. 集合(List / Map / Set)+ 常用操作

  7. 异步编程(Future / async / await / Stream)

  8. 泛型(Generics)

  9. 扩展方法(Extension)

  10. 枚举(Enum)加强版

  11. Dart 的 Isolate(并行模型)

  12. 常用语言糖 & 语法技巧


1. Dart 的特点

特点 描述
强类型 静态类型,支持类型推断
Null Safety 默认变量不为空,可控可空类型
AOT + JIT Flutter Release:AOT(性能高),Flutter Debug:JIT(热重载)
单线程模型 事件循环,类似 JS,但支持 isolate 多线程
跨平台 Flutter 全平台使用

2. 基础语法

main() 函数(程序入口)

void main() {
  print("Hello Dart");
}

注释

// 单行
/* 多行 */
/** 文档注释 */

输出

print("value");

3. 变量 & 类型系统(Null Safety)

变量声明

var name = 'Tom';  // 自动推断 String
final age = 18;    // 只能赋值一次
const PI = 3.14;   // 编译时常量

final vs const

final const
运行时确定 编译时常量
只能赋值一次 须为编译期可计算的值
常用于对象 常用于数值、字符串等

🎯 Null Safety(重要)

默认变量 不允许为空

String name = "A"; // OK
String user;       // ❌ 报错:必须初始化

可空类型 String?

String? nickname;
nickname = null;

空安全操作符

操作符 作用
? 可空字段访问
?? null 则使用默认值
??= null 则赋值
! 断言不为空

示例

String? a;
print(a ?? "default");   // default

a ??= "Hello";           // 如果为 null 赋值
print(a);                // Hello

String? b = "abc";
String c = b!;   // 断言 b 不为空,否则运行时异常

4. 函数(Function)

普通函数

int add(int a, int b) {
  return a + b;
}

箭头函数

int add(int a, int b) => a + b;

可选参数

① 位置可选参数([]):

void test(a, [b, c]) { }
test(1);
test(1, 2);

② 命名可选参数({})

最推荐的方式:

void greet({required String name, int age = 18}) {
  print("$name, $age");
}

greet(name: "Tom");

5. 类与对象(class)

基本定义

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void say() => print("Hi $name");
}

使用

var p = Person("Tom", 20);

构造函数

普通构造

Person(this.name, this.age);

命名构造

Person.fromJson(Map map) {
  name = map["name"];
  age = map["age"];
}

常量构造

class Point {
  final int x, y;
  const Point(this.x, this.y);
}

const p = Point(1, 2);

继承 & 方法重写

class Animal {
  void run() => print("run");
}

class Dog extends Animal {
  @override
  void run() => print("Dog run");
}

接口

所有类都可被当作接口:

class A {
  void foo() {}
}

class B implements A {
  @override
  void foo() {}
}

mixin(多继承)

复用代码的最佳方式:

mixin Fly {
  void fly() => print("flying");
}

class Bird with Fly {}

6. 集合

List

var list = [1, 2, 3];
list.add(4);

Set

var s = {1, 2, 3};
s.add(1); // 无效

Map

var m = {"name": "Tom"};
m["age"] = 20;

集合操作(高级)

map/filter/reduce

var list = [1,2,3];
var doubled = list.map((e) => e * 2).toList();

展开操作符(...)

var l = [1, ...[2,3], 4];

null-aware 展开(...?)

List<int>? a;
var l = [...?a, 1, 2];

7. 异步编程(Dart 的核心)

Future(类似 JavaScript Promise)

Future<String> fetch() async {
  return "data";
}

async / await

void getData() async {
  var data = await fetch();
}

Stream(可多次返回数据)

监听事件流:

Stream<int> count() async* {
  for (int i = 0; i < 3; i++) {
    yield i;
  }
}

void main() {
  count().listen((value) => print(value));
}

8. 泛型 Generics

List<String> names = [];
Map<String, int> map = {};

泛型函数:

T first<T>(List<T> list) => list[0];

9. 扩展方法 Extension

无侵入式增强类能力:

extension StringExt on String {
  bool get isEmail => contains("@");
}

print("abc@test.com".isEmail);

10. 加强版 Enum(Dart 2.17+)

enum Color {
  red(1),
  green(2),
  blue(3);

  final int value;
  const Color(this.value);
}

print(Color.red.value); // 1

还能声明方法、接口,非常强大。


11. Isolate(真正多线程)

Dart 中 isolate 是独立内存空间 + 消息通信的线程。

例:启动 isolate:

import 'dart:isolate';

void entry(SendPort port) {
  port.send("hello");
}

void main() async {
  final rec = ReceivePort();
  await Isolate.spawn(entry, rec.sendPort);
  rec.listen(print);
}

Flutter 的 Compute 就是 isolate 的封装。


12. Dart 语言糖 & 必会技巧

① ?. 链式调用

user?.profile?.name;

② ??= 默认赋值

name ??= "default";

③ 级联操作符(..)

var p = Person("A", 20)
  ..name = "B"
  ..say();

④ late 延迟初始化

late String token;
token = "abc";

⑤ typedef 类型别名

typedef Callback = void Function(int);

📌 结语:Flutter 开发者应该怎样掌握 Dart?

建议学习路线:

  1. 理解变量、泛型、集合

  2. 搞懂 async/await(应用最多)

  3. 掌握 class + OOP + mixin(控制 UI 构建的核心思想)

  4. 熟练使用 extension、enum 增强写法

  5. 懂 isolate(性能优化加分项)

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新

更多推荐