flutter Future的正確用法

在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的狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章