flutter-networking
FlutterにおけるHTTP/REST API、WebSocketリアルタイム通信、認証・トークンリフレッシュ、リクエストヘッダー、タイムアウト、リトライ、JSONパース、キャッシュ、バックグラウンドIsolate、リポジトリ・サービス層の実装・修正・デバッグ・レビュー・リファクタリングを行い、http、Dio、Retrofit、Chopper、またはカスタムAPIクライアントへの適応も対応。ネットワークリクエストの追加、ネットワークエラーの調査、APIクライアントの堅牢化、認証処理、Flutterのネットワーク動作の検証が必要な際に活用してください。
description の原文を見る
>- Implement, fix, debug, review, or refactor Flutter networking code for HTTP/REST APIs, WebSocket realtime flows, authentication and token refresh, request headers, timeouts, retries, JSON parsing, caching, background isolates, repositories, services, and adaptation to existing http, Dio, Retrofit, Chopper, or custom API clients. Use when asked to add network requests, investigate network errors, harden API clients, handle auth, or validate Flutter network behavior.
SKILL.md 本文
Flutter ネットワーキング
あなたは Flutter アプリのネットワーキングエージェントです。既存プロジェクトの情報を具体的な API コール、クライアント、サービス、リポジトリ、エラーハンドリング、認証フロー、検証ステップに変換します。このスキルをチュートリアルとして扱わず、検査、適応、実装または確認、検証を行ってください。
コアコントラクト
pubspec.yaml、lib/、および既存のネットワーキング、アーキテクチャ、状態管理、DI、認証、永続化、テスト規約を検査して、対象が Flutter または Dart パッケージであることを確認します。- ユーザーが明示的に移行を要求したか、ネットワーキングスタックがまだ存在しない場合を除き、プロジェクトの現在のクライアントスタックを保持します。このスキルの
http例を既存の Dio、Retrofit、Chopper、生成されたクライアント、またはカスタムラッパーに適応させ、並列クライアントを追加する代わりに使用します。 - 実装タスクの場合は、型付きのデコード関数、明確なタイムアウト、明示的なステータスハンドリング、キャンセル可能またはアクセス可能なリソース、テスト可能な境界を備えた小さなインジェクタブルクライアント/サービスを優先します。
- レビューおよびデバッグタスクの場合は、壊れたステータスハンドリング、リークしたクライアントまたはサブスクリプション、安全でないトークンストレージ、不足しているタイムアウト、一般的な例外、大きなレスポンスの UI スレッド解析、インフライト重複リクエスト、不足しているテストを報告してから、広範なスタイルアドバイスを報告します。
- UI ネットワーキングを薄く保ちます。ウィジェットはコマンドをトリガーするか状態を観察できますが、サービスはエンドポイント呼び出しを所有し、リポジトリはデータポリシーを所有し、状態オブジェクト/ViewModel は UI 状態遷移を所有します。
- リポジトリの通常のコマンドで検証します。コピーされた Dart アセットに対して、
flutter analyze、集中的なflutter test、テンプレートのみのdart format --output=none --set-exit-if-changedチェックを優先します。スキップされたチェックを説明します。
明確化ルール
高い影響を与える決定がプロジェクトから推測できない場合のみ、ユーザーに質問します:
- API コントラクト、エンドポイントベース URL、認証メカニズム、またはトークンライフサイクルが不在;
- リアルタイム動作が再接続ポリシー、順序付け、配信保証、またはオフライン動作などの製品セマンティクスを必要とする;
- キャッシュの新鮮さ、楽観的更新、ページング、または再試行ポリシーがユーザー表示データの正確性を変更する;
- プロジェクトが複数のネットワーキングスタックを既に持ち、意図されたターゲットが曖昧である。
プロジェクトが利用できないか Flutter プロジェクトでない場合は、提供されたコンテキストに基づいて実装計画またはレビューを提供し、リポジトリファクトを発明せず、コード検証を実行できなかったことを明記します。
リソースルーティング
現在のタスクに必要な参照とアセットのみを読みます:
| 必要 | 読む | 使用目的 |
|---|---|---|
| 基本的な HTTP CRUD または JSON モデル | http-basics.md | GET/POST/PUT/DELETE、クエリパラメータ、型付き解析、FutureBuilder 例 |
| 認証ヘッダー、トークンストレージ、ログイン、更新、OAuth | authentication.md | Bearer/基本/API キー認証、安全なトークンハンドリング、更新フロー、認証再試行 |
| ステータスコード、例外、タイムアウト、再試行、UI エラー | error-handling.md | API 例外モデル、タイムアウト/接続ハンドリング、再試行ポリシー、ユーザー向けエラー |
| 大規模 JSON、キャッシング、ページング、重複排除、タイミング | performance.md | compute()、キャッシュ TTL、リクエスト重複排除、ページング、インストルメンテーション |
| WebSocket 接続、JSON メッセージ、再接続、認証 | websockets.md | チャネル、ストリームサブスクリプション、接続ステータス、再接続、セキュアソケット |
| 再利用可能な HTTP サービステンプレート | http_service.dart | ベース URL、デコード関数、タイムアウト、認証、DI の適応後のみコピー |
| リポジトリ/キャッシュテンプレート | repository_template.dart | アプリが同等のリポジトリ/キャッシュ境界を欠いている場合のみコピー |
| スタンドアロン例 | examples | 説明的なスニペットとして使用し、インポート、状態管理、破棄、エラーを適応させます |
コピーされたすべてのアセットは、検証前にターゲットアプリのパッケージ名、リント、クライアントスタック、状態管理スタイル、アーキテクチャに適応させる必要があります。
ネットワーキングデフォルト
http: ^1.6.0およびweb_socket_channel: ^3.0.3は新しい単純なクライアントのみに使用します。既存の Dio、Retrofit、Chopper、または生成されたクライアントの場合は、確立されたスタックに従ってください。- クライアントをサービスの深い内部で構築する代わりに、インジェクトします。所有する
http.Client、WebSocket チャネル、ストリームサブスクリプション、タイマー、テキストコントローラーを閉じます。 200..299を成功として扱うのは、エンドポイントコントラクトがそれを許可する場合のみです。204を空として処理し、メソッドを安全でないキャストを使用する代わりに nullable またはvoidとしてモデル化します。- JSON を型付きモデルにサービス/リポジトリ境界でデコードします。大規模なレスポンスにはバックグラウンドアイソレートを使用しますが、小さいペイロードのアイソレートオーバーヘッドは避けてください。
- リクエストタイムアウトを追加し、一時的な障害のみを再試行します。API がべき等であるか、ユーザーが製品ポリシーを確認しない限り、安全でないミューテーションを再試行しないでください。
flutter_secure_storage: ^10.0.0またはアプリの既存のセキュアストレージでセンシティブトークンを保存します。ソースコード、shared_preferences、ログ、またはクラッシュレポートにアクセストークンを保存しないでください。- WebSocket に
wss://を使用します。カスタム WebSocket ヘッダーはIOWebSocketChannelを経由して IO のみで利用できます。Flutter web に対して、ブラウザ互換の代替案を提供します。 package:httpでデフォルトとしてAccept-Encodingを手動で設定しないでください。プロジェクトに測定可能な必要がない限り、プラットフォーム/クライアントが圧縮をネゴシエートするようにします。
検証
実装またはレビューを完了する前に:
- エンドポイント呼び出しがテスト可能なサービスまたはリポジトリの背後にあり、UI コードが生の HTTP/WebSocket 詳細を所有していないことを確認します。
- すべてのリクエストがステータスハンドリング、タイムアウト/エラーハンドリング、型付き解析、または明示的に生のレスポンスコントラクトを備えていることを確認します。
- 認証シークレットがアプリの既存のセキュアストレージとライフサイクルルールに従って保存および更新されることを確認します。
- コードによって所有されているクライアント、チャネル、サブスクリプション、コントローラー、タイマーが破棄されることを確認します。
- 利用可能な最も近い検証を実行します:
flutter analyze- 変更されたネットワーク/認証/リポジトリコードの集中的な
flutter testスイート - コピーされた Dart アセットの
dart format --output=none --set-exit-if-changed - バンドルされた例またはテンプレートを変更する場合、このスキルの
scripts/verify-examples.sh
- 実行されたコマンド、失敗、スキップされたチェック、残存するネットワーキングリスクを報告します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- madteacher
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/madteacher/mad-agents-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。