Flutter

FlutterでAPIを取得する方法|http・JSON・FutureBuilderの基本

FlutterでAPIを取得する基本を解説します。httpパッケージ、GETリクエスト、JSONパース、Future、ローディングとエラー表示の流れを整理します。

この記事の目次
  1. この記事の結論
  2. パッケージを追加する
  3. GETリクエストを送る
  4. 画面に表示する
  5. 本番ではModelに分ける
  6. 実装後に確認すること
  7. よくあるつまずき
  8. 次に読む記事
  9. まとめ

FlutterでAPIを取得するには、非同期処理、HTTPリクエスト、JSON変換、ローディング表示を組み合わせます。この記事ではGETでデータを取得する最小構成を扱います。

この記事の結論

まずはhttp.getでレスポンスを取得し、jsonDecodeでMapに変換し、FutureBuilderや状態管理で画面に表示する流れを押さえます。

パッケージを追加する

flutter pub add http

GETリクエストを送る

import "dart:convert";
import "package:http/http.dart" as http;

Future<Map<String, dynamic>> fetchPost() async {
  final url = Uri.parse("https://jsonplaceholder.typicode.com/posts/1");
  final response = await http.get(url);

  if (response.statusCode != 200) {
    throw Exception("API取得に失敗しました");
  }

  return jsonDecode(response.body) as Map<String, dynamic>;
}

画面に表示する

FutureBuilder<Map<String, dynamic>>(
  future: fetchPost(),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const CircularProgressIndicator();
    }
    if (snapshot.hasError) {
      return Text("エラー: ${snapshot.error}");
    }
    final data = snapshot.data!;
    return Text(data["title"] as String);
  },
)

本番ではModelに分ける

最初はMapで確認しても構いませんが、画面が増えたらModelクラス、Repository、エラー処理へ分けると保守しやすくなります。

実装後に確認すること

  • statusCodeを確認しているか
  • jsonDecodeの型を確認しているか
  • ローディングとエラー表示があるか
  • API URLやキーを直接散らばらせていないか

よくあるつまずき

  • awaitを書き忘れる
  • ステータスコードを見ない
  • API取得をbuild内で毎回実行する
  • エラー時の画面を用意しない

次に読む記事

まとめ

FlutterのAPI取得は、http、Future、JSON、ローディング表示の組み合わせです。まずはGETの最小構成を動かし、次にModelやRepositoryへ整理しましょう。