現役エンジニアに悩みや疑問を30分間無料で質問し放題!

【Flutter×Dart】非同期処理(async/await)|Futureとは?

今回はDartにおける「非同期処理」の使い方について紹介します。

非同期処理を使えば、APIの情報取得が完了するまで指定した処理を待つよう指定させたり、待ち時間がある処理をスキップして同時に複数の処理を実行させたりできます。

目次

まずは「future」を理解する

結論から言うと、futureとは「Future型」のインスタンスです。

  • Uncompleted:非同期処理が完了していない状態
  • Completed :非同期処理が完了している状態(結果「value」またはエラーを返す)

futureには「Uncompleted (処理中)」「Completed (処理完了)」の2つの状態があります。

非同期処理が完了した際に結果を返すのは「Future<T>」、処理だけ実行するのは「Future<void>」です。

非同期関数(Future型)の定義

//void型
Future<void> future1() async {
  await future;
} 

//return型(Stringの場合)
Future<String> future2() async {
  await future;
  return 戻り値;
}

非同期関数を定義するには「Future<型>」で関数の型を宣言し、「{}」の前に「async」を追加します。

関数内で非同期処理(future)を実行するには「await」を宣言します。(awaitはasyncを宣言した関数内でしか使用できません)

//例
void main() {
  print('ステップ1');
  step2();
  print('ステップ3');
}

Future<void> step2() async {
  print('ステップ2-1');
  await Future.delayed(Duration(seconds: 3));
  print('ステップ2-2');
}

//出力
//ステップ1
//ステップ2-1
//ステップ3
//ステップ2-2

「await」でfutureの処理が完了されるまでの間、同時進行で別の処理を実行させています。

Future.delayed

Future.delayed」はFutureクラスのコンストラクタです。

今回は非同期処理を説明する例として使用しています。

定義
Future.delayed(Duration(時間単位: 時間指定), (){
  処理...
});
//例
Future.delayed(Duration(seconds: 3), () {
  print('Hello World'); //3秒後に出力される
});

以上です。

  • URLをコピーしました!
目次
閉じる