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

Flutter基础(Future和async/await)

 什么是 Future

Future 就像一个 “承诺”:我现在不能给你结果,但未来某个时间点一定给你(成功或失败)。

最简单的例子

// 模拟异步操作:2秒后返回"Hello, Future!"
Future<String> fetchData() {return Future.delayed(Duration(seconds: 2), () => "Hello, Future!");
}void main() {print("开始执行...");// 方式一:使用 .then() 处理结果fetchData().then((result) {print("接收到结果: $result"); // 2秒后打印});print("主线程继续执行,不会等待"); // 立即打印
}// 输出顺序:
// 1. 开始执行...
// 2. 主线程继续执行,不会等待
// 3. (2秒后) 接收到结果: Hello, Future!

用 async/await 简化代码

Future<String> fetchData() {return Future.delayed(Duration(seconds: 2), () => "Hello, Async/Await!");
}void main() async {print("开始执行...");// 方式二:使用 async/await (更简洁)String result = await fetchData(); // 等待Future完成print("接收到结果: $result");print("主线程继续执行"); // 2秒后才会执行这行
}
特性不用 async/await.then()用 async/await
代码结构嵌套回调(Callback Hell)线性结构,类似同步代码
错误处理需要 .catchError() 链可以用 try/catch 块
执行顺序回调函数在 Future 完成后才会被加入事件队列代码逻辑上是 “等待”,但实际不会阻塞主线程

连续异步操作对比

不用 async/await(嵌套回调)
void main() {fetchUserData().then((user) {return fetchUserPosts(user.id); // 返回第二个 Future}).then((posts) {return savePostsToCache(posts); // 返回第三个 Future}).then((_) {print("全部完成");}).catchError((error) {print("错误: $error");});
}
用 async/await(线性结构)
void main() async {try {User user = await fetchUserData();List<Post> posts = await fetchUserPosts(user.id);await savePostsToCache(posts);print("全部完成");} catch (error) {print("错误: $error");}
}

Future的并行和串行

核心区别:启动时机不同

串行执行(代码 1):
// 第一步:启动任务1 → 等待2秒 → 任务1完成
final result1 = await fetchData1(); // 2秒后才会继续执行下一行// 第二步:启动任务2 → 等待2秒 → 任务2完成
final result2 = await fetchData2(); // 再等2秒
并行执行(代码 2):
// 第一步:同时启动任务1和任务2
final future1 = fetchData1(); // 立即启动任务1
final future2 = fetchData2(); // 立即启动任务2// 第二步:分别等待两个任务完成
// 由于两个任务同时进行,这里只需要等2秒
final result1 = await future1; // 2秒后完成
final result2 = await future2; // 立即完成(因为已经等了2秒)

相关文章:

  • 地平线静态目标检测 MapTR 参考算法 - V2.0
  • 创客匠人解析:身心灵赛道创始人 IP 打造核心策略
  • 《剖开WebAssembly 2.0:C++/Rust内存管理困局与破局》
  • 网关ARP防护的措施
  • 实变与泛函题解-心得笔记【15】
  • 【软考高项论文】论信息系统项目的沟通管理
  • 质量管理重要理论知识和质量管理工具
  • glog使用详解和基本使用示例
  • Django项目创建与基础功能实现指南
  • 前端React和Vue框架的区别
  • Redis集群全流程实战指南
  • c++ 学习(二、结构体)
  • WHERE 子句中使用子查询:深度解析与最佳实践
  • 深入详解:随机森林算法——概念、原理、实现与应用场景
  • 系统架构设计师备考之架构设计基础
  • Vue.js 中的文本溢出处理与工具提示组件:`TextEllipsisTooltip`
  • LabVIEW液压系统远程监控
  • 【安卓Sensor框架-1】SensorService 的启动流程
  • Vue 项目中 Excel 导入导出功能笔记
  • AWS OIDC 详解:告别长期密钥,拥抱安全高效的云身份验证