共计 861 个字符,预计需要花费 3 分钟才能阅读完成。
在 flutter 中经常会用到异步任务,dart 中异步任务异步处理是用 Future 来处理,那么如何实现用 Future 来处理一个异步操作呢,网上的 Future 教程、原理都是说说原理,但是没有什么干货,没有教你如何去用。今天看了下源码,终于知道如何去使用 Future 了。其实和 javaScript 的 promise 很像,但是 promise 的参数函数的参数提供了 resolve,reject 方法去操控状态,
那么 Future 难道就没有吗?原来 dart:async 提供了 Completer 类,通过实例这个类生成 Future,同时在用这个实例去控制生成的 future 的成功或者失败的状态。代码如下:
Future openImagePicker () {Complete completer = new Completer();
// ImagePicker 是一个图片选择插件
ImagePicker.singlePicker(
context,
singleCallback: (data) {completer.complete(data);
},
failCallback:(err) {completer.catchError(err);
}
);
return completer.future;
}
// 使用
openImagePicker().then((data) {}).catchError((err){});
返回 completer 生成的 future,通过 completer.complete 方法去控制 completer.future 的成功状态,通过 completer.catchError 去控制 completer.future 的失败状态。
completer.complete 和 completer.catchError 方法的参数就是 future 的返回值。
completer.complete 就相当于 promise 的 resolve,completer.catchError 相当于 promise 中的 reject()
通过 Completer 可以得心应手的控制 Future 的状态。
正文完