flutter-use-http-package
flutter/skills
`http` パッケージを使用して、GET、POST、PUT、または DELETE リクエストを実行します。REST API からデータを取得したり、REST API にデータを送信したりする必要がある場合に使用します。
...すべて拡張しますflutter-use-http-packageについて
flutter-use-http-package 特定のワークフローに特化した、再利用可能なAIスキルです。名称:flutter-use-http-package
このスキルには、手順、規約、およびタスク固有のガイダンスがパッケージ化されており、エージェントがより一貫性を持って作業を実行できるようになっています。説明: `http` パッケージを使用して、GET、POST、PUT、または DELETE リクエストを実行します。 REST API からデータを取得したり、REST API にデータを送信したりする必要がある場合に使用します。モデル: models/gemini-3.1-pro-preview 最終更新日: 2026年4月21日(火) 21:36:42 GMT
実際には、このスキルは、セットアップの手順が少なく、曖昧さが少ない、繰り返し実行可能な処理を必要とするユーザーに最適です。 - [設定と権限](#configuration--permissions) - [リクエストの実行とレスポンスの処理](#request-execution--response-handling) - [バックグラウンドでの解析](#background-parsing) - [ワークフロー:ネットワーク操作の実行](#workflow-executing-network-operations)
よくある質問
flutter-use-http-packageにはどのような利点がありますか?
flutter-use-http-package エージェントがソースドキュメントに記載された明確なワークフローに従うのを支援し、曖昧さを減らし、実行が意図されたタスクに沿ったものになるようにします。
このスキルはどのような場合に使用すべきですか?
タスクがスキルのドキュメントに記載されているワークフロー、ドメイン、または運用ルールに合致する場合、特に一貫した実行が重要な場合に使用してください。
主な制限事項は何ですか?
このスキルは、ソースとなる指示の質と範囲によって制約を受けます。基礎となるドキュメントが不完全な場合、エージェントは追加のコンテキスト情報や手動による検証を必要とする可能性があります。
Implementing Flutter Networking
Contents
- Configuration & Permissions
- Request Execution & Response Handling
- Background Parsing
- Workflow: Executing Network Operations
- Examples
Configuration & Permissions
Configure the environment and platform-specific permissions required for network access.
- Add the
httppackage dependency via the terminal:flutter pub add http
- Import the package in your Dart files:
import 'package:http/http.dart' as http;
- Configure Android permissions by adding the Internet permission to
android/app/src/main/AndroidManifest.xml:<uses-permission android:name="android.permission.INTERNET" />
- Configure macOS entitlements by adding the network client key to both
macos/Runner/DebugProfile.entitlementsandmacos/Runner/Release.entitlements:<key>com.apple.security.network.client</key><true/>
Request Execution & Response Handling
Execute HTTP operations and map responses to strongly typed Dart objects.
- URIs: Always parse URL strings using
Uri.parse('your_url'). - Headers: Inject authorization and content-type headers via the
headersparameter map. UseHttpHeaders.authorizationHeaderfor auth tokens. - Payloads: For POST and PUT requests, encode the body using
jsonEncode()fromdart:convert. - Status Validation: Evaluate
response.statusCode. Treat200 OK(GET/PUT/DELETE) and201 CREATED(POST) as success. - Error Handling: Throw explicit exceptions for non-success status codes. Never return
nullon failure, as this preventsFutureBuilderfrom triggering its error state and causes infinite loading indicators. - Deserialization: Parse the raw string using
jsonDecode(response.body)and map it to a custom Dart object using a factory constructor (e.g.,fromJson).
Background Parsing
Offload expensive JSON parsing to a separate Isolate to prevent UI jank (frame drops).
- Import
package:flutter/foundation.dart. - Use the
compute()function to run the parsing logic in a background isolate. - Ensure the parsing function passed to
compute()is a top-level function or a static method, as closures or instance methods cannot be passed across isolates.
Workflow: Executing Network Operations
Use the following checklist to implement and validate network operations.
Task Progress:
- 1. Define the strongly typed Dart model with a
fromJsonfactory constructor. - 2. Implement the network request method returning a
Future<Model>. - 3. Apply conditional logic based on the operation type:
- If fetching data (GET): Append query parameters to the URI.
- If mutating data (POST/PUT): Set
'Content-Type': 'application/json; charset=UTF-8'and attach thejsonEncodebody. - If deleting data (DELETE): Return an empty model instance on success (
200 OK).
- 4. Validate the
statusCodeand throw anExceptionon failure. - 5. Integrate the
Futureinto the UI usingFutureBuilder. - 6. Handle
snapshot.hasData,snapshot.hasError, and default to aCircularProgressIndicator. - 7. Feedback Loop: Run the app -> trigger the network request -> review console for unhandled exceptions -> fix parsing or permission errors.
Examples
High-Fidelity Implementation: Fetching and Parsing in the Background
import 'dart:async';import 'dart:convert';import 'dart:io';import 'package:flutter/foundation.dart';import 'package:flutter/material.dart';import 'package:http/http.dart' as http;// 1. Top-level parsing function for IsolateList<Photo> parsePhotos(String responseBody) { final parsed = (jsonDecode(responseBody) as List<Object?>) .cast<Map<String, Object?>>(); return parsed.map<Photo>(Photo.fromJson).toList();}// 2. Network execution with background parsingFuture<List<Photo>> fetchPhotos() async { final response = await http.get( Uri.parse('https://jsonplaceholder.typicode.com/photos'), headers: { HttpHeaders.authorizationHeader: 'Bearer your_token_here', HttpHeaders.acceptHeader: 'application/json', }, ); if (response.statusCode == 200) { // Offload heavy parsing to a background isolate return compute(parsePhotos, response.body); } else { throw Exception('Failed to load photos. Status: ${response.statusCode}'); }}// 3. Strongly typed modelclass Photo { final int id; final String title; final String thumbnailUrl; const Photo({ required this.id, required this.title, required this.thumbnailUrl, }); factory Photo.fromJson(Map<String, dynamic> json) { return Photo( id: json['id'] as int, title: json['title'] as String, thumbnailUrl: json['thumbnailUrl'] as String, ); }}// 4. UI Integrationclass PhotoGallery extends StatefulWidget { const PhotoGallery({super.key}); @override State<PhotoGallery> createState() => _PhotoGalleryState();}class _PhotoGalleryState extends State<PhotoGallery> { late Future<List<Photo>> _futurePhotos; @override void initState() { super.initState(); // Initialize Future once to prevent re-fetching on rebuilds _futurePhotos = fetchPhotos(); } @override Widget build(BuildContext context) { return FutureBuilder<List<Photo>>( future: _futurePhotos, builder: (context, snapshot) { if (snapshot.hasData) { final photos = snapshot.data!; return ListView.builder( itemCount: photos.length, itemBuilder: (context, index) => ListTile( leading: Image.network(photos[index].thumbnailUrl), title: Text(photos[index].title), ), ); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } // Default loading state return const Center(child: CircularProgressIndicator()); }, ); }}
flutter-use-http-packageをインストール
スキルファイルをダウンロードし、.claude/skills/ ディレクトリに解凍してください。
ZIPをダウンロードリポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。
git clone https://github.com/flutter/skills/blob/main/skills/flutter-use-http-package/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
コピー





家
