
作者:个人主页:ujainu
前言
🚀 Dart 基础语法详解:函数、类与构造函数全面解析
本文带你系统掌握 Dart 中的核心语法 ------ 函数定义、参数类型、匿名函数、箭头函数以及类和构造函数的使用方法。适合 Flutter 开发初学者快速上手!
Dart中的函数定义
在 Dart 中,函数是程序的基本构建块之一。一个完整的函数通常包括:返回类型、函数名、参数列表和函数体。
✅返回值
- 有返回值:具体类型 函数名称(){}
dart
String getName() {
return "Dart";
}
- 无返回值:void 函数名称(){}
dart
void printHello() {
print("Hello Dart!");
}
- 注意:返回值类型可以省略,Dart会知道推断类型为dynamic
dart
// 不推荐:类型不明确
getAge() => 25;
实例:

函数中的必传参数和可选位置参数
✅必传参数
- 特点:必传参数不能为空,必须按顺序传递。
dart
void introduce(String name, int age) {
print("我叫$name,今年$age岁");
}
- 调用时必须传入所有参数:
dart
introduce("张三", 20); // ✅ 正确
// introduce("李四"); ❌ 错误:缺少参数
实例代码:
✅可选位置参数
- 特点:用方括号 [] 包裹,表示该参数可选,且必须放在必传参数之后。
dart
void introduce(String name, [int? age, String? city]) {
print("我叫$name${age != null ? ',$age岁' : ''}${city != null ? ',来自$city' : ''}");
}
- 语法:函数名(String a,[String?b,...]),传递时安照顺序传递。
dart
introduce("张三"); // 输出:我叫张三
introduce("李四", 25); // 输出:我叫李四,25岁
introduce("王五", 30, "北京"); // 输出:我叫王五,30岁,来自北京
实例代码:
✅可选命名参数
- 特点:使用花括号 {} 定义,调用时通过 参数名: 值 的形式传参,无需关心顺序。
dart
void introduce(String name, {int? age, String? city}) {
print("我叫$name${age != null ? ',$age岁' : ''}${city != null ? ',来自$city' : ''}");
}
- 调用方式(自由指定参数):
dart
introduce("张三");
introduce("李四", age: 25);
introduce("王五", city: "上海", age: 30); // 参数顺序无关
✅ 优势:代码更具可读性,尤其适用于参数较多的情况。
实例代码:
匿名函数和箭头函数
✅匿名函数(Anonymous Function)
- 特点:声明一个没有名称的函数赋值给变量,进行调用。
- 语法:Function变量名 = (){};
- 注意:函数的类型使用Function来声明。
没有函数名的函数,常用于回调或赋值给变量。
dart
var sayHi = () {
print("Hello,这是一个匿名函数!");
};
// 调用
sayHi();
也可以带参数:
dart
var greet = (String name) {
print("你好,$name!");
};
greet("Dart");
实例:

✅箭头函数(Arrow Function)
- 特点:函数体只有一行代码,可以用箭头函数。
- 语法:函数名()=> 代码逻辑
- 注意:使用箭头函数可以省略关键字。
dart
// 普通函数
void printName() {
print("张三");
}
// 箭头函数简化版
void printName() => print("张三");
// 带参数的箭头函数
var multiply = (int a, int b) => a * b;
print(multiply(3, 4)); // 输出:12
实例:

Dart 中的类(Class)
class
- 定义:包含属性和方法来定义对象的行为和状态。
- 需求:定义一个Person类,包含姓名、年龄、性别,包括学习方法。
- 语法:class Person{属性,方法}
- 实例化对象:Person 变量 = Person(); 属性和方法:变量.属性/方法()
✅ 示例:定义一个 Person 类
dart
// 简单的Dart类样例
class Person {
// 属性(成员变量)
String name;
int age;
String? address; // 可选属性,使用?表示可为null
// 构造函数
Person(this.name, this.age, {this.address});
// 方法(成员函数)
void sayHello() {
print("你好,我叫$name,今年$age岁。");
if (address != null) {
print("我来自$address。");
}
}
// getter方法
String get info => "$name - $age岁";
// setter方法
set updateAge(int newAge) {
if (newAge > 0) {
age = newAge;
}
}
// 静态方法
static void printDefaultMessage() {
print("这是Person类的静态方法。");
}
}
✅ 使用类创建对象并调用成员
dart
void main() {
// 创建Person对象
final person1 = Person("张三", 20, address: "北京");
final person2 = Person("李四", 25);
// 调用实例方法
person1.sayHello();
person2.sayHello();
// 使用getter
print("\nperson1的信息:${person1.info}");
print("person2的信息:${person2.info}");
// 使用setter
person1.updateAge = 21;
print("\n更新后person1的年龄:${person1.age}");
// 调用静态方法
Person.printDefaultMessage();
}
结果

dart类中的默认和命名构造函数
✅ 1. 默认构造函数(Default Constructor)
- Dart 会自动生成无参构造函数(如果未定义其他构造函数),但我们通常手动定义带参数的构造函数。
dart
Person(this.name, this.age, {this.address});
等价于:
dart
Person(String name, int age, {String? address})
: name = name,
age = age,
address = address;
✅ 2. 命名构造函数(Named Constructor)
允许为同一个类定义多个不同用途的构造函数,语法为 ClassName.identifier。
示例:fromJson 和 defaultPerson
dart
// 从 JSON 创建对象
Person.fromJson(Map<String, dynamic> json)
: name = json['name'],
age = json['age'],
address = json['address'];
// 创建默认用户
Person.defaultPerson()
: name = "未知",
age = 18,
address = "未知地址";
默认和命名构造函数对比示例:
dart
// Dart类构造函数样例
class Person {
// 属性(成员变量)
String name;
int age;
String? address; // 可选属性,使用?表示可为null
// 1. 默认构造函数
// 语法:类名(参数列表)
Person(this.name, this.age, {this.address});
// 2. 命名构造函数:从JSON创建对象
// 语法:类名.构造函数名(参数列表) : 初始化列表
Person.fromJson(Map<String, dynamic> json) :
name = json['name'],
age = json['age'],
address = json['address'];
// 3. 命名构造函数:创建默认对象
Person.defaultPerson() :
name = "未知",
age = 18,
address = "未知地址";
// 方法(成员函数)
void sayHello() {
print("你好,我叫$name,今年$age岁。");
if (address != null) {
print("我来自$address。");
}
}
// getter方法
String get info => "$name - $age岁";
// setter方法
set updateAge(int newAge) {
if (newAge > 0) {
age = newAge;
}
}
// 静态方法
static void printDefaultMessage() {
print("这是Person类的静态方法。");
}
}
void main() {
print("=== Dart类构造函数示例 ===\n");
// 1. 使用默认构造函数
print("1. 使用默认构造函数:");
final person1 = Person("张三", 20, address: "北京");
final person2 = Person("李四", 25);
person1.sayHello();
person2.sayHello();
// 2. 使用命名构造函数:fromJson
print("\n2. 使用命名构造函数fromJson:");
final personJson = {
'name': '王五',
'age': 28,
'address': '上海'
};
final person3 = Person.fromJson(personJson);
person3.sayHello();
// 3. 使用命名构造函数:defaultPerson
print("\n3. 使用命名构造函数defaultPerson:");
final person4 = Person.defaultPerson();
person4.sayHello();
// 使用getter
print("\n4. 使用getter获取信息:");
print("person1的信息:${person1.info}");
print("person2的信息:${person2.info}");
// 使用setter
print("\n5. 使用setter更新年龄:");
person1.updateAge = 21;
print("更新后person1的年龄:${person1.age}");
// 调用静态方法
print("\n6. 调用静态方法:");
Person.printDefaultMessage();
}
运行结果:

📌 结语
Dart 作为 Flutter 的开发语言,其语法简洁而强大。掌握好 函数定义、参数机制、类与构造函数 是迈向 Flutter 高效开发的第一步。
👉 后续我们将深入讲解:继承、混入(mixin)、泛型、异步编程(Future/Stream) 等高级内容,敬请关注!
欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区!