在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