
こんばんは〜
弊社ブログに辿り着いていただきありがとうございます!
株式会社メモリアインクのいちのです
この記事を読んでわかること
- Flutterのhttpパッケージを使用したエラーハンドリングの基本
- Exceptionを使用したエラーハンドリングの方法
- pubspec.yamlにhttpパッケージを追加する方法
開発環境
- Dart 3.0.0
- Flutter 3.10.0
- http 1.2.1
httpパッケージについて
httpパッケージは、FlutterアプリでHTTPリクエストを行うためのライブラリで、APIとの通信などに使用されます。
httpパッケージのセットアップ
概要
Flutterプロジェクトでhttpパッケージを使用するためには、まずpubspec.yaml
ファイルに依存関係を追加する必要があります。
サンプルコード
dependencies:
flutter:
sdk: flutter
http: ^1.2.1
pubspec.yaml
ファイルにこの依存関係を記述した後、ターミナルまたはコマンドプロンプトでflutter pub get
コマンドを実行して、パッケージをプロジェクトにインストールします。
httpパッケージを使用したエラーハンドリング
概要
HTTPリクエストは様々な理由で失敗する可能性があります。ネットワークの不具合、サーバーのエラー、不正なリクエストなど、様々な原因が考えられます。これらのエラーを適切に処理することが重要です。
サンプルコード
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: ElevatedButton(
onPressed: _fetchData,
child: Text('データを取得'),
),
),
),
);
}
void _fetchData() async {
final url = Uri.parse('https://example.com/data');
try {
final response = await http.get(url);
if (response.statusCode == 200) {
// ここでデータを処理
print('データ取得成功: ${response.body}');
} else {
// サーバーからのエラーレスポンスを処理
print('サーバーエラー: ${response.statusCode}');
}
} catch (e) {
// ネットワークエラーを処理
print('ネットワークエラー: $e');
}
}
}
サンプルコードの解説
- 11-20行目: アプリのUIを定義しています。ここでは、中央に「データを取得」ボタンが配置されています。
- 23-38行目:
_fetchData
関数は、非同期操作を行うためにasync
キーワードを使用して定義されています。この関数はHTTPリクエストを送信し、レスポンスを処理します。 - 24行目: HTTP GETリクエストの送信先URLを定義しています。
- 25-37行目:
try-catch
ブロックを使用して、HTTPリクエストの送信とレスポンスの処理を行います。これにより、エラーを適切に捕捉し処理することができます。 - 26行目:
http.get
メソッドを使用してHTTP GETリクエストを送信し、レスポンスを変数response
に格納しています。 - 27-33行目: HTTPレスポンスのステータスコードを確認し、200の場合は成功と見なしてデータを処理します。それ以外の場合は、エラーメッセージをログに出力します。
- 32行目:36行目: ネットワークエラーなどの例外を捕捉し、エラーメッセージをログに出力します。
Log(ログ)出力にご興味のある読者様。以下の記事で分かりやすく丁寧に解説しておりますので、ぜひご一読いただけますと幸いです。


Exceptionを使用したエラーハンドリング
概要
Exceptionを使用したエラーハンドリングでは、エラーの種類に応じてカスタム例外を投げることができます。これにより、エラーの原因をより詳細に特定しやすくなります。
サンプルコード
class ServerException implements Exception {
final String message;
ServerException(this.message);
}
class NetworkException implements Exception {
final String message;
NetworkException(this.message);
}
void _fetchData() async {
final url = Uri.parse('https://example.com/data');
try {
final response = await http.get(url);
if (response.statusCode == 200) {
// ここでデータを処理
print('データ取得成功: ${response.body}');
} else {
// サーバー例外を投げる
throw ServerException('サーバーエラー: ${response.statusCode}');
}
} on NetworkException {
// ネットワークエラーを処理
print('ネットワークエラー');
} catch (e) {
// その他のエラーを処理
print('エラー: $e');
}
}
サンプルコードの解説
- 1-9行目:
ServerException
とNetworkException
クラスを定義しています。これらはカスタム例外クラスで、エラーメッセージを含めることができます。 - 11-29行目:
_fetchData
関数内で、HTTPリクエストを送信し、レスポンスに基づいて適切な例外を投げるか決定します。try-catch
ブロックを使用して、これらの例外を捕捉し処理します。 - 20行目: ステータスコードが200以外の場合、
ServerException
を投げます。これにより、サーバーエラーが発生したことを示します。 - 22-28行目:
on NetworkException
ブロックを使用して、ネットワーク例外を特定して処理します。このブロックは、NetworkException
が投げられた場合にのみ実行されます。 - 25-28行目: 予期せぬエラーを捕捉し、ログに出力します。これには
ServerException
やNetworkException
以外の例外が含まれます。
まとめ
いかがでしたでしょうか?今回は、httpパッケージとExceptionを使用したエラーハンドリングについて、サンプルコードを用いて解説してみました。読者様の開発の手助けに少しでもなればいいなと思いこの記事を書かせていただいております。弊社ではAndroid、iOS、Flutterを使ったアプリ開発についてのブログを多数投稿させていただいておりますので、ご興味のある方はぜひ!



自分の成長を加速させるチャンスがどこかにあるかもしれません。
変化を恐れずに新たな環境に飛び込む勇気のある方は、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
コメント