在 Flutter
中,Future
是一个用于处理异步
操作的类。它表示一个可能尚未完成
的操作,操作完成后将返回一个结果
或抛出一个错误
。简而言之,Future
是处理异步编程
的一种方式,它表示你正在等待某个操作(如网络请求、文件读取等)完成,并最终获得其结果。
Future 的作用
Future
主要用于异步操作,它允许在操作还没有完成时继续执行其他任务,等到操作完成后通过回调函数处理结果。
基本概念
Future
是一个表示未来某个时刻可能会完成的操作(可能成功或失败)。Future
具有两种状态:- 未完成:表示操作还在进行中。
- 完成:表示操作已经完成,要么成功(Future 产生一个值),要么失败(Future 抛出一个错误)。
定义Future(两种常见的模拟方式——注意区别)
1、async、await是配后Future.delayed
使用,能够让代码从上到下顺序执行;
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // 模拟延迟(例如:等待网络请求)
return '数据加载完成';
}
2、直接用第二个参数返回,这个代码包在方法体里面;
Future<int> fetchData() {
return Future.delayed(Duration(seconds: 2), () {
return ++count; // 模拟数据加载
}); // 模拟延迟(例如:等待网络请求)
}
如何使用 Future?
示例 1:使用 Future 和 async/await
import 'dart:async';
void main() async {
print('程序开始');
var result = await fetchData(); // 异步调用
print(result); // 输出结果
print('程序结束');
}
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // 模拟延迟(例如:等待网络请求)
return '数据加载完成';
}
解释:
fetchData
是一个返回Future<String>
的异步函数,表示它会在未来某个时刻返回一个字符串。await
关键字让程序在等待fetchData
完成时不阻塞主线程,而是让其他任务继续执行,等到fetchData
完成后再继续执行。Future.delayed(Duration(seconds: 2))
模拟一个异步操作,通常是网络请求或时间延迟。- 当
fetchData
执行完成时,返回 '数据加载完成',await
等待它完成并将结果赋给result
。
示例 2:使用 then 和 catchError
import 'dart:async';
void main() {
print('程序开始');
fetchData()
.then((result) {
print(result); // 输出结果
})
.catchError((error) {
print('发生错误: $error');
});
print('程序结束');
}
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () {
return '数据加载完成';
});
}
解释:
- 在这个例子中,我们使用
then
来处理Future
完成时的结果,并使用catchError
来处理错误。 then
负责处理异步操作成功的结果,而catchError
负责捕获异常。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。