MENU
カテゴリー
\気になるカテゴリーをクリック!/
Flutterで非同期処理の実装方法を知りたい
FlutterのFuture、FutureBuilderの使い方がよく分からない。
ということで悩んでませんか?
そこで、今回はFlutterのFuture・Futurebuilderにおける基本的な使い方をサンプルコードとデモ動画で解説します。Future・Futurebuilder
を使ことで、非同期処理が簡単にできます。
フリーランスのFlutterエンジニアとして働きたい方にオススメのエージェントはこちらで詳しく解説しています。
同期処理 | 順番に処理する。1つの処理を実行中に次の処理を実行できない |
非同期処理 | 順番に処理するが、1つの処理を実行中に次の処理を実行できる |
非同期処理とは、ネットワーク・DBなどにおいて処理に時間がかかる場合、コストの大きい計算で時間のかかる処理をする際に利用します。
以下のデモ動画のように非同期処理は簡単に作成できます。以下のアプリでは、初期処理時は「しばらくお待ち下さい」を表示し、初期処理3秒後に「合格」を表示する非同期処理です。
それでは非同期処理で利用するFuture
FutureBuilder
についてFlutter公式サイトをもとに解説します。Future
FutureBuilder
を使えば非同期処理も簡単です。
The result of an asynchronous computation.
(直訳)非同期処理の結果
引用:Flutter公式サイト「Future class」
Future
は非同期処理状況の結果をもつクラスです。以下の2つの状態があります。
未完了 | 非同期処理を呼び出したとき、未完了のfutureを返す。futureは非同期処理の完了を待つか、エラーを出す |
完了 | 非同期処理が成功すれば、futureは値(もしくはエラー)を持って完了する |
Widget that builds itself based on the latest snapshot of interaction with a Future.
(直訳)Future との相互作用の最新のスナップショットに基づいて自身を構築するウィジェット。
引用:Flutter公式サイト「FutureBuilder class」
FutureBuilder
は非同期処理の状況確認や結果のデータを取得することができます。
Future
、FutureBuilder
サンプルコードは以下の通りです。コピペでそのまま使えます。
冒頭デモ動画のサンプルコードです。初期処理時は「しばらくお待ち下さい」を表示し、初期処理と同時に3秒後に「合格」を表示するコードです。
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: const MyHomePage(title: '非同期処理デモ'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// Future型は非同期処理(時間のかかる処理)
Future<String> getResult() async {
await Future.delayed(Duration(seconds: 3));
return "合格!";
// throw 'Failded';
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: FutureBuilder<String?>(
future: getResult(),
builder: (context, snapshot) {
if(snapshot.hasError){
final error = snapshot.error;
return Text('$error', style: TextStyle(fontSize: 60,),);
}else if (snapshot.hasData) {
String result = snapshot.data!;
return Text('$result', style: TextStyle(fontSize: 60,),);
} else {
return const Text("しばらくお待ち下さい",style: TextStyle(fontSize: 30,),);
}
},
)),
);
}
}
Future
で押さえておくべきポイントは以下の2点です。
async | 初めのawaitキーワードに行くまでに、その間にある同期処理を実行する。await前にある全ての同期コードは即時実行される。await処理が終わるまで、以降のコードは実行されない。 |
await | awaitはFutureの非同期処理が完了するまで待ち、さらに非同期処理の結果を取り出してくれる |
FutureBuilder
で押さえておくべきポイントは以下の3点です。
future | futureプロパティは型がFutureのメソッドまたは変数を指定 |
builder | builderプロパティは非同期処理の途中で処理したいWidgetをコーディングする。 |
snapshot | futureで指定したメソッドの状況は第2引数のsnapshotに格納され、処理状況の変化に応じて自動的にbuilderプロパティに合致する部分が再ビルドされます。 |
サンプルコードでは、3秒処理を待つ間、リターンは返しません。
Future<String> getResult() async {
await Future.delayed(Duration(seconds: 3));
return "合格!";
}
サンプルコードではFuture型のgetResultメソッドを指定してます。
FutureBuilder<String?>(
future: getResult(),
サンプルコードでは、getResultメソッドの状況ごとに自動的に再ビルドされます。getResultの状況はsnapshotに格納されており結果を確認できます。snapshotオブジェクト「.〇〇」のメソッドを利用することで非同期処理の通信状態やメソッドからの戻り値等を取得できます。
builder: (context, snapshot) {
// データ取得に失敗した場合
if(snapshot.hasError){
// エラーメッセージの取得
final error = snapshot.error;
return Text('$error', style: TextStyle(fontSize: 60,),);
// データがある場合
}else if (snapshot.hasData) {
// getResultメソッドがreturnした値を取得
String result = snapshot.data!;
return Text('$result', style: TextStyle(fontSize: 60,),);
// データ取得中の場合
} else {
return const Text("しばらくお待ち下さい",style: TextStyle(fontSize: 30,),);
}
},
今回の記事では、FlutterのFutureとFutureBuilderにおける基本的な使い方をサンプルコードとデモ動画で解説しました。
非同期処理で押さえておくべきポイント
Future
で押さえておくべきポイントは以下の2点です。
async | 初めのawaitキーワードに行くまでに、その間にある同期処理を実行する。await前にある全ての同期コードは即時実行される。await処理が終わるまで、以降のコードは実行されない。 |
await | awaitはFutureの非同期処理が完了するまで待ち、さらに非同期処理の結果を取り出してくれる |
FutureBuilder
で押さえておくべきポイントは以下の3点です。
future | futureプロパティは型がFutureのメソッドまたは変数を指定 |
builder | builderプロパティは非同期処理の途中で処理したいWidgetをコーディングする。 |
snapshot | futureで指定したメソッドの状況は第2引数のsnapshotに格納され、処理状況の変化に応じて自動的にbuilderプロパティに合致する部分が再ビルドされます。 |
Flutterエンジニアになるには?
初心者が中級者レベルのFlutterエンジニアなるまでの進め方をまとめました。
Flutterの学習方法を知る
Flutter をスクールで学ぶ
Flutterの副業を探す
おまけ:Flutter入門の完全ガイド
Flutter/Dartの基礎一覧
Flutter/Dartの入門知識として押さえておきたい内容をまとめました。学習のご参考にどうぞ。
Widget(ウィジェット) 一覧
Dart 基本文法
ライブラリ 使い方
コメント