flutter Future的正确用法

在flutter中常常会用到异步任务,dart中异步任务异步处理是用Future来处理,那么如何实现用Future来处理一个异步操做呢,网上的Future教程、原理都是说说原理,可是没有什么干货,没有教你如何去用。今天看了下源码,终于知道如何去使用Future了。其实和javaScript的promise很像,可是promise的参数函数的参数提供了resolve,reject方法去操控状态,
那么Future难道就没有吗?原来dart:async提供了Completer类,经过实例这个类生成Future,同时在用这个实例去控制生成的future的成功或者失败的状态。代码以下:java

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的返回值。promise

completer.complete就至关于promise的resolve,completer.catchError至关于promise中的reject()异步

经过Completer能够驾轻就熟的控制Future的状态。async

相关文章
相关标签/搜索