😇
【Flutter/Dart】Completerクラスを使ってFutureを利用するメソッドを自作しよう
Completerとは
・Futureオブジェクトを生成し、後で値またはエラーを使用してそれらを完了する方法
どんな時に使用するのか?
Futureを最初から作成する必要がある場合
(例えば、コールバックベースのAPIをFutureベースのAPIに変換する場合)
※コールバック関数:関数に引数として渡される関数のこと
実際にCompleterを使ってみよう
まず初めに、Completerオブジェクトを作成します。
次に、非同期的な処理を行い、その中でCompleterのcomplete(T value)メソッドを呼び出すことで、対応するFutureの処理を完了させることができます。
そして、Completerの持つfutureオブジェクトを返り値として返します。
最後に、呼び出し側でFutureを処理すれば、非同期処理の完了です。これで非同期なメソッドを実装することができました。
import 'dart:async';
main() {
asyncMethod().then((message) => print(message));
}
Future<String> asyncMethod() {
// Completer<T>を作成
var completer = new Completer<String>();
// 何かしら非同期な処理が完了したときに
// Completer<T>のcomplete<T value>メソッドを呼び出して処理を完了させる
new Timer(new Duration(seconds: 1), () => completer.complete("done."));
// Completerの持つFutureオブジェクトを返す
return completer.future;
}
Discussion