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

相關文章
相關標籤/搜索