Dart 程式設計中的 Future 類


Dart 中有許多不同的類和關鍵字,當我們想要執行非同步程式碼時可以使用它們。**future** 類允許我們執行非同步程式碼,並且可以幫助我們避免回撥地獄。**future** 主要表示非同步操作的結果。

在 Dart 中,有很多標準庫呼叫會返回一個 future,其中一些是:

  • http.get

  • SharedPreference.getInstance()

Dart 中的 future 可以有兩種狀態:

  • **已完成** - 當 future 的操作完成並且 future 以一個值或錯誤完成時。

  • **未完成** - 當一個函式被呼叫並且它返回一個 future 時,該函式會排隊並返回一個未完成的 future。

語法

Future<T>

在 Dart 中,如果一個 future 不會產生任何可用的值,那麼該 future 的型別為 Future<void>。此外,如果函式沒有顯式地返回值,那麼返回型別也是 Future<void>。

示例

讓我們考慮一個簡單的例子,其中我們宣告一個 future,它將以延遲的方式顯示一條訊息。

Consider the example shown below:
   Future<void> printDelayedMessage() {
      return Future.delayed(Duration(seconds: 4), () => print('Delayed Output.'));
}

void main() {
   printDelayedMessage();
   print('First output ...');
}

在上面的示例中,我們有一個名為 **printDelayedMessage()** 的函式,它返回一個 void 型別的 future,並且我們有一個 future 使用名為 delayed 的方法,透過該方法我們可以將延遲輸出列印到終端。

輸出

First output ...
Delayed Output.

需要注意的是,輸出的第二行將在 4 秒後列印。

Dart 中的 Futures 還允許我們使用 then 方法註冊回撥。

示例

請考慮以下示例:

void main() {
   var userEmailFuture = getUserEmail();
   // register callback
   userEmailFuture.then((userId) => print(userId));
   print('Hello');
}

// method which computes a future
Future<String> getUserEmail() {
   // simulate a long network call
   return Future.delayed(Duration(seconds: 4), () => "mukul@tutorialspoint.com");
}

輸出

Hello
mukul@tutorialspoint.com

更新於: 2021年5月21日

416 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.