Inspire - Capo Productions
函数
函数参数
位置参数后可以跟两种类型参数:命名参数、可选位置参数,但这两种类型参数不能同时出现。
位置参数
调用函数时必须按照参数顺序传递参数,即使某些参数是可选的。
dart
void printUser(String name, int age, String? email) {
print('$name - $age - $email');
}
printUser('张三', 18, 'zhangsan@example.com'); // 张三 - 18 - zhangsan@example.com
printUser('李四', 20, null); // 李四 - 20 - null可选位置参数(用 [] 包裹)
因为调用时可以省略可选位置参数,所以定义参数时:
- 要么使用
?标识为可选,调用时省略就是null。 - 要么给定默认值。
dart
void printUser(String name, [int? age, String email = '123@qq.com']) {
print('$name - $age - $email');
}
printUser('张三'); // 张三 - null - 123@qq.com直接定义参数会报错:

Preview
命名参数(用 {} 包裹)
调用时必须使用参数名指定参数值,参数顺序可以任意。
因为命名参数默认是可选的,所以定义参数时:
- 要么使用
?标识为可选,调用时省略就是null。 - 要么给定默认值。
- 要么使用
required标识为必传。
dart
void printUser({required String name, int age = 18, String? email}) {
print('$name - $age - $email');
}
printUser(name: '李四', age: 20, email: '456@qq.com'); // 李四 - 20 - 456@qq.com
printUser(name: '王五', age: 22); // 王五 - 22 - null
printUser(name: '赵六'); // 赵六 - 18 - null直接定义参数会报错:

Preview
Flutter 中大量使用命名参数,如:
dart
ElevatedButton(
onPressed: () {},
child: Text('按钮'),
)传入函数作为参数
dart
void fetchData(void Function(String data) onSuccess) {
onSuccess('数据来了');
}
fetchData((data) {
print(data);
});箭头函数
箭头函数的参数列表必须使用括号包裹,即使只有一个参数,也不能省略。
dart
// 正确写法:
String result = ['张三', '李四', '王五'].firstWhere((item) => item == '李四', orElse: () => '');dart
// 错误写法:
String result = ['张三', '李四', '王五'].firstWhere(item => item == '李四', orElse: () => '')
Preview