flutter-Future的正确用法

36次阅读

共计 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 的状态。

正文完
 0