当前位置: 首页 > news >正文

flutter dart 函数语法

以下是 Dart 语言中函数语法的 详细实例说明,涵盖了所有常用写法

  • 基本语法
  • 参数类型(必选、可选、命名、默认值)
  • 匿名函数、箭头函数
  • 高阶函数(函数作为参数/返回值)
  • 异步函数(async / await)

1. 函数的基本语法

int add(int a, int b) {return a + b;
}void main() {print(add(2, 3)); // 输出:5
}
  • int:返回类型
  • add:函数名
  • (int a, int b):参数
  • return:返回结果

可选参数(位置和命名)

  • 位置可选参数(使用 [])
String greet(String name, [String? title]) {return title == null ? 'Hello $name' : 'Hello $title $name';
}void main() {print(greet('Tom')); // Hello Tomprint(greet('Tom', 'Dr.')); // Hello Dr. Tom
}
  • 命名可选参数(使用 {})
String greet2({required String name, String title = 'Mr.'}) {return 'Hello $title $name';
}void main() {print(greet2(name: 'Jerry')); // Hello Mr. Jerryprint(greet2(name: 'Jerry', title: 'Dr.')); // Hello Dr. Jerry
}
  • 默认参数值
int multiply(int a, [int b = 2]) {return a * b;
}void main() {print(multiply(4)); // 8print(multiply(4, 3)); // 12
}
  • 箭头函数(简写)
int square(int x) => x * x;void main() {print(square(5)); // 25
}
  • 只能用于单表达式函数
  • 自动推断 return
  • 5匿名函数(无名字的函数)
void main() {var list = ['apple', 'banana', 'cherry'];list.forEach((item) {print('Fruit: $item');});
}
  • 函数作为参数(高阶函数)
void printResult(int a, int b, int Function(int, int) operation) {print('结果:${operation(a, b)}');
}void main() {printResult(10, 5, (a, b) => a + b); // 结果:15printResult(10, 5, (a, b) => a - b); // 结果:5
}
  • 函数作为返回值(闭包)
Function createMultiplier(int factor) {return (int value) => value * factor;
}void main() {var triple = createMultiplier(3);print(triple(4)); // 12
}
  • 异步函数(async / await)
Future<String> fetchData() async {await Future.delayed(Duration(seconds: 2));return '数据加载完毕';
}void main() async {print('开始加载');String data = await fetchData();print(data); // 数据加载完毕
}
  • 类型推断函数(无返回类型)
sayHi(name) {print('Hi, $name!');
}
类型写法示例
普通函数int sum(int a, int b) {...}
箭头函数int square(int x) => x * x;
匿名函数() => print('hi')
高阶函数(int a, int b, Function op)
默认参数add(int a, [int b = 2])
命名参数greet({String name})
异步函数Future<String> getData() async {...}

示例

import 'package:flutter/material.dart';class GreetingPage extends StatefulWidget {@override_GreetingPageState createState() => _GreetingPageState();
}class _GreetingPageState extends State<GreetingPage> {final TextEditingController _nameController = TextEditingController();String _greeting = '';bool _isLoading = false;// 普通函数:生成问候语String _generateGreeting(String name) {return '你好,$name,欢迎来到 Flutter 世界!';}// 异步函数:模拟加载过程(网络请求)Future<void> _handleGreeting() async {String name = _nameController.text.trim();if (name.isEmpty) {_showSnackBar('请输入你的名字');return;}setState(() => _isLoading = true);// 模拟网络延迟await Future.delayed(Duration(seconds: 2));setState(() {_greeting = _generateGreeting(name); // 调用普通函数_isLoading = false;});}// 箭头函数:显示提示void _showSnackBar(String msg) =>ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg)));@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('问候示例')),body: Padding(padding: const EdgeInsets.all(20.0),child: Column(children: [TextField(controller: _nameController,decoration: InputDecoration(labelText: '请输入你的名字'),),SizedBox(height: 20),ElevatedButton(onPressed: _isLoading ? null : _handleGreeting,child: _isLoading? CircularProgressIndicator(color: Colors.white): Text('点击问候'),),SizedBox(height: 30),if (_greeting.isNotEmpty)Text(_greeting,style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),),],),),);}
}
类型函数名 / 用法说明
普通函数_generateGreeting()返回问候字符串
异步函数_handleGreeting()模拟网络请求、更新状态
箭头函数_showSnackBar()简化写法:()=>
回调函数onPressed: _handleGreeting按钮点击绑定函数

函数返回一个对象(基础写法)

  • 假设有一个类 User:
class User {String name;int age;User({required this.name, required this.age});@overrideString toString() => 'User(name: $name, age: $age)';
}
  • 函数返回 User 对象:
User createUser(String name, int age) {return User(name: name, age: age);
}
  • 调用:
void main() {User user = createUser('Alice', 30);print(user); // 输出:User(name: Alice, age: 30)
}

✅ 二、函数返回一个对象列表(List)

List<User> getUsers() {return [User(name: 'Tom', age: 25),User(name: 'Jerry', age: 28),];
}void main() {var users = getUsers();for (var user in users) {print(user);}
}

✅ 三、箭头函数返回对象(简洁写法)

User getAdmin() => User(name: 'Admin', age: 99);

✅ 四、异步函数返回对象(Future)

Future<User> fetchUser() async {await Future.delayed(Duration(seconds: 1)); // 模拟延迟return User(name: 'RemoteUser', age: 22);
}void main() async {User user = await fetchUser();print(user); // 输出:User(name: RemoteUser, age: 22)
}

✅ 五、工厂函数(工厂构造返回对象)

class Product {final String name;final double price;Product(this.name, this.price);// 工厂函数:从 JSON 创建对象factory Product.fromJson(Map<String, dynamic> json) {return Product(json['name'], json['price']);}
}Product getProductFromJson() {Map<String, dynamic> json = {'name': 'iPhone', 'price': 999.0};return Product.fromJson(json);
}

:函数返回对象的写法

返回类型示例代码
返回单个对象User getUser() { return User(...); }
返回对象列表List<User> getUsers() { ... }
箭头返回对象User getUser() => User(...);
异步返回对象Future<User> fetchUser() async { ... }
工厂函数生成对象Product.fromJson({...})
http://www.xdnf.cn/news/580447.html

相关文章:

  • OceanBase数据库全面指南(数据操作篇DML)
  • 【Java多态】:灵活编程的核心
  • com.alibaba.fastjson2 和com.alibaba.fastjson 区别
  • Spark Streaming原理与应用
  • SpringCloud Alibaba微服务-- Sentinel的使用(笔记)
  • Spark SQL、Hive SQL运行流程解析及对比
  • macOS专业用户远程操作全场景优化指南:开发运维协同、安全合规与性能提升实战
  • GitLab 备份所有仓库(自动克隆)
  • OceanBase数据库全面指南(查询进阶篇DQL)
  • XXE(外部实体注入)
  • 创建信任所有证书的HttpClient:Java 实现 HTTPS 接口调用,等效于curl -k
  • 【Linux学习笔记】ext2文件系统的深度剖析
  • 微软CTO:AI已经“能力过剩”,行业需要努力缩小模型能力与实际产品交付之间的差距
  • rt-linux下的底层锁依赖因cgroup cpu功能导致不相干进程的高时延问题
  • 边缘计算是什么?逻辑视域下的边缘计算:分布式计算范式的理论基础与逻辑结构分析
  • SQL的RAND用法和指定生成随机数的范围
  • MySQL中InnoDB引擎逻辑存储结构、B+树索引结构、B+树高度及存储数据量
  • 从零基础到最佳实践:Vue.js 系列(8/10):《性能优化与最佳实践》
  • 借助Azure AI Foundry 如何打造语音交互新体验
  • 结构型:适配器模式
  • K8S之核心技术Helm
  • 谷歌medgemma-27b-text-it医疗大模型论文速读:面向医学视觉问答的语义标签知识增强数据集SLAKE
  • 【Linux】进程间通信(四):System V标准(共享内存、消息队列、信息量)
  • [Git] 认识 Git 的三大区域 文件的修改和提交
  • linux杀死进程自身
  • Docker实战
  • docker network 自定义网络配置与管理指南
  • 数字孪生技术如何重塑能源产业?
  • 生成树协议(STP)配置详解:避免网络环路的最佳实践
  • java基础(api)