More
FlutterにおけるFuture.waitとBack4appを使用した非同期操作の最適化方法
7 分
はじめに 非同期プログラミングは、特に複数のソースからデータを取得したり、複数のネットワークリクエストを行ったりするタスクを扱う際に、現代のアプリ開発において不可欠です。しかし、複数の非同期呼び出しを効率的に処理することは難しい場合があります。flutterでは、 future wait メソッドが複数の futures を管理するための強力な方法を提供し、アプリが複数の非同期操作を同時に効率的に待機できるようにします。 このチュートリアルでは、複数の非同期タスクを扱う際にアプリのパフォーマンスを最適化するために、flutterでの future wait の使用方法を学びます。この技術をback4appと統合し、バックエンドからの同時データ取得を行い、結果を保存し、ユーザーの待機時間を大幅に短縮します。 前提条件 このチュートリアルを完了するには、次のものが必要です back4appアカウント。 back4app com https //www back4app com で無料アカウントにサインアップしてください。 ローカルマシンにflutter開発環境をセットアップしてください。まだセットアップしていない場合は、 flutterインストールガイド https //flutter dev/docs/get started/install を参照してください。 flutterにおける非同期プログラミングの基本的な知識と、バックエンドサービスとしてのback4appの使用方法。back4appが初めての場合は、 back4appの使い方ガイド https //www back4app com/docs/get started/welcome を確認してください。 ステップ 1 – back4app バックエンドの設定 back4app プロジェクトを作成 あなたの back4app アカウント https //dashboard back4app com/ にログインし、新しいプロジェクトを作成します。 parse クラスを作成 あなたの back4app プロジェクトで、 task と project という2つの新しい parse クラスを作成します。 「 task 」クラスには次のフィールドが必要です name (string) と completed (boolean)。 「 project 」クラスには次のフィールドが必要です title (string) と description (string)。 サンプルデータを追加 これらのクラスにサンプルデータを入力します。これは、私たちの flutter アプリで future wait を使用して同時に取得します。 back4app 認証情報を取得 プロジェクト設定に移動して、アプリケーション id とクライアントキーを取得します。これらは、flutter アプリを back4app に接続するために必要です。 ステップ 2 – flutter プロジェクトの設定 新しい flutter プロジェクトを作成 ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行します 依存関係を追加 pubspec yaml を開き、次の依存関係を追加します アプリで parse を初期化 lib/main dart , parse sdk をインポートし、 main 関数内で初期化します const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); 「 'your back4app app id' 」と 'your back4app client key' を実際のback4appの認証情報に置き換えてください。 ステップ3 – future wait を使用してデータを同時に取得する taskprojectscreenウィジェットを作成する lib/main dart に、 task と project の両方からデータを同時に取得する新しいウィジェットを追加します。 class taskprojectscreen extends statefulwidget { @override taskprojectscreenstate createstate() => taskprojectscreenstate(); } class taskprojectscreenstate extends state\<taskprojectscreen> { list\<parseobject>? tasks; list\<parseobject>? projects; string? errormessage; @override void initstate() { super initstate(); fetchdata(); } future\<void> fetchdata() async { try { // fetch tasks and projects concurrently final futures = \[ gettasks(), getprojects(), ]; final results = await future wait(futures); setstate(() { tasks = results\[0] as list\<parseobject>; projects = results\[1] as list\<parseobject>; }); } catch (e) { setstate(() { errormessage = e tostring(); }); } } future\<list\<parseobject>> gettasks() async { final query = querybuilder\<parseobject>(parseobject('task')); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { throw exception('failed to load tasks'); } } future\<list\<parseobject>> getprojects() async { final query = querybuilder\<parseobject>(parseobject('project')); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { throw exception('failed to load projects'); } } @override widget build(buildcontext context) { if (errormessage != null) { return center(child text('error $errormessage')); } if (tasks == null || projects == null) { return center(child circularprogressindicator()); } return listview( children \[ listtile(title text('tasks')), tasks! map((task) => listtile( title text(task get\<string>('name') ?? 'no name'), subtitle text('completed ${task get\<bool>('completed') ? 'yes' 'no'}'), )), listtile(title text('projects')), projects! map((project) => listtile( title text(project get\<string>('title') ?? 'no title'), subtitle text(project get\<string>('description') ?? 'no description'), )), ], ); } } このウィジェットは、 future wait を使用してタスクとプロジェクトを同時に取得し、両方のリクエストを同時に処理することで、合計待機時間を短縮します。 ステップ 4 – アプリのテストと実行 アプリを実行するには flutter run を使用します。 画面にタスクとプロジェクトのリストが表示されるはずです。両方のデータセットは同時に取得され、データの取得プロセスがより速く、効率的になります。 結論 このチュートリアルでは、アプリの非同期操作を最適化するために future wait を使用する方法を学びました。複数のソースからデータを同時に取得し、back4appと統合することで、アプリをより応答性の高いものにし、ユーザーの待機時間を短縮しました。 堅牢なバックエンドであるback4appと組み合わせて future wait を使用することで、複数の非同期タスクを効率的に管理し、flutterアプリケーションのパフォーマンスを向上させることができます。flutterでback4appを使用する詳細については、 back4app flutter ドキュメント https //www back4app com/docs/flutter/overview をご覧ください。コーディングを楽しんでください!