mcpField
F
flutter-navigation

flutter-navigation

github.com/madteacher開発110591 回インストール26 週間前に更新
リポジトリ

flutter-navigation について

既存の Flutter アプリでルーティングを実装・変更する開発者向けのナビゲーションスキルです。現状の構成を調べ、適切な方式を選び、関連する動作を検証します。

主な機能

  1. 01既存のルーティングと状態の調査
  2. 02要件に応じた Navigator / go_router の選択
  3. 03ルートデータとディープリンクの処理
  4. 04認証とナビゲーション動作の維持
  5. 05ルート変更のテストと検証

活用シーン

  1. 01詳細画面への遷移追加
  2. 02ディープリンクとブラウザー履歴の設定
  3. 03認証リダイレクトやネストしたタブの実装
  4. 04ナビゲーション変更とテストの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/madteacher/mad-agents-skills --skill flutter-navigation

インストール後、Claude Code で/flutter-navigationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
go_router_basic.dart
navigator_basic.dart
passing_data.dart
returning_data.dart
references/
deep-linking.md
go_router-guide.md
navigation-patterns.md
web-navigation.md

詳細

Flutter Navigation

Flutter のナビゲーション実装エージェントです。既存の状態、認証フロー、プラットフォームの想定を損なうことなく、ルートの状態、ブラウザーやディープリンクの動作、画面遷移を対象アプリに合わせることが役割です。

原則 0

ナビゲーションはユーザーの状態です。現在の MaterialApp、Router、Navigator、状態管理、認証、サポート対象プラットフォーム、テストを確認する前に、アプリのルーティングモデルを置き換えたり、ディープリンクに関する仕様を追加したりしないでください。ナビゲーションを変更した後は、Dart のアナライザーで問題がないことと、変更の影響を受けるルートの動作を検証してください。

ワークフロー

  1. 依頼の内容を特定します。単純な画面遷移、データの受け渡し、戻り値、ルートの移行、ディープリンクの設定、ウェブのブラウザー履歴、ネストされたタブやシェル、認証リダイレクト、ルートエラー処理、ナビゲーションテストのいずれかを確認します。
  2. コードを参照できる場合は、まずローカルの Flutter プロジェクトを調査します。pubspec.yaml、lib/、アプリのルート、既存のルート定義、ナビゲーション呼び出し、認証/状態プロバイダー、プラットフォーム用フォルダー、ウェブのホスティング設定、関連テストを確認します。
  3. 要件を満たす最小限のルーティングモデルを選びます。
    • シンプルなアプリのローカルで URL アドレス指定できないフローには、Navigator と MaterialPageRoute を使用します。
    • ディープリンク、ウェブ URL、ブラウザー履歴、認証リダイレクト、ネストされたナビゲーション、複数の Navigator、拡張可能なルートテーブルには、go_router を使用します。
    • 既存の小規模なアプリでレガシーの MaterialApp.routes 名前付きルートがすでに使われており、カスタムのディープリンク動作が不要な場合を除き、新たに導入するのは避けてください。
  4. ルートデータを慎重に設計します。ローカルの Navigator による画面遷移ではコンストラクター引数を使い、URL アドレス指定が必要な識別情報にはパスパラメーターを、任意の URL 状態にはクエリパラメーターを使います。extra は URL アドレス指定できないインメモリデータに限って使用します。
  5. アプリの既存のスタイルに沿って実装します。ユーザーから変更の依頼がない限り、安定した URL、ルート名、選択中のタブ状態、戻る動作、状態復元、分析用オブザーバー、認証リダイレクトのセマンティクスを維持します。
  6. 可能であれば、変更したルートの動作に関するテストを追加または更新します。依頼された変更に応じて、ルートの解析、リダイレクト、シェルやタブの選択、戻り値、見つからない場合やエラー時の画面をテストします。
  7. 利用できる範囲で最も確実なローカルチェックを実施します。ランタイム、デバイス、サーバー、ディープリンクの検証を省略した場合は、明示してください。

判断ガイド

必要なものデフォルトの方法
詳細画面を 1 つ開いて戻るMaterialPageRoute<T> を使った Navigator.push<T>
共有、ブックマーク、ブラウザーでのルート指定URL ベースのロケーションを使う go_router
必須のリソース識別情報パスパラメーター。例:/users/:userId
任意のフィルター、タブ、検索状態Uri(...).toString() を介したクエリパラメーター
認証ゲートまたはオンボーディングゲートアプリの認証状態に連動する go_router の redirect または onEnter
永続的なナビゲーション用 UIShellRoute。各ブランチに独立したスタックが必要な場合は StatefulShellRoute を使用
ウェブのパス URLusePathUrlStrategy() と、index.html への SPA サーバーリライト
ネイティブの検証済みウェブリンクAndroid App Links または iOS Universal Links と、ホストされた関連付けファイル
アプリ専用のカスタム URIセキュリティとフォールバックのトレードオフを明示したカスタムスキーム

リソースの振り分け

現在のタスクに必要なリソースだけを読み込んでください。

タスク読み込む/使用するもの目的
Navigator と go_router のどちらを選ぶか、またはルートに関するトレードオフを確認するnavigation-patterns.mdアプローチの比較、データの受け渡し、ブラウザー/ディープリンクの制限
go_router のルートテーブル、リダイレクト、シェル、エラー、名前付きルート、ルートデータを実装または修正するgo_router-guide.md現在の go_router API と一般的な落とし穴
Android App Links、iOS Universal Links、カスタムスキーム、ディープリンクのテストを設定するdeep-linking.mdプラットフォームの設定、関連付けファイル、Flutter ハンドラーに関する注意事項、テストコマンド
Flutter Web の URL、ブラウザー履歴、SPA のリライト、ルート以外へのホスティングを修正するweb-navigation.mdURL 戦略、サーバーのリライト、Web 固有の検証
最小限の Navigator スターターが必要navigator_basic.dartクラス名とアプリシェルを調整してからコピーしてください
最小限の go_router スターターが必要go_router_basic.dart依存関係を追加し、ルートを調整してからコピーしてください
Navigator でローカルデータを渡す必要があるpassing_data.dartデモ用のモデル名と画面名を置き換えてからコピーしてください
Navigator で返却データを受け取る必要があるreturning_data.dartnull やキャンセルされた結果を適切に処理してからコピーしてください

デフォルトでは、すべてのリファレンスを読まないでください。リファレンスは必要に応じて参照する詳細情報として、アセットは本番用モジュールではなくスターター例として扱ってください。

実装ルール

  • 主なナビゲーションモデルを安易に混在させないでください。アプリで go_router を使用している場合、アプリの主要なルートには context.go、context.push、context.goNamed、または context.pushNamed を優先してください。意図的にディープリンクの対象としないローカルオーバーレイやフローに限り、命令型の Navigator を使用してください。
  • クエリ文字列を含むロケーションは、Uri(path: ..., queryParameters: ...).toString() または go_router の名前付きルート API で構築してください。context.push や context.go に queryParameters 引数を渡さないでください。
  • クエリパラメーターは state.uri.queryParameters から、パスパラメーターは state.pathParameters から読み取ってください。
  • 複雑な状態を URL だけに保存しないでください。ルート文字列を解析して検証し、ID や列挙型の値を安全に変換してください。また、値がない場合や無効な場合は、リダイレクト、エラー画面、フォールバック UI、または 404 の動作で処理してください。
  • 更新、ブラウザーでの復元、共有、ネイティブのディープリンクを経ても保持する必要があるデータには extra を使用しないでください。Web で複雑な extra が必要な場合は、コーデックを設定するか、データが失われる可能性を許容してください。
  • 認証リダイレクトがループしないようにしてください。ログインやオンボーディングの後にユーザーを元のルートへ戻す場合は、戻り先を保持してください。
  • iOS Universal Links では、Info.plist のルートテーブルではなく、Xcode または ios/Runner/Runner.entitlements で Associated Domains を設定してください。
  • Web のパス戦略では、ルート以外のパスをホストする場合、web/index.html の base href とサーバーのリライトを更新してください。対象のアプリがすでにその規約を採用している場合を除き、すべての GoRoute.path にホスティングのプレフィックスを含めないでください。
  • アセットをそのままコピーしないでください。インポート、ルート名、キー、アプリシェル、パッケージバージョン、null 安全性、Lint、テストを対象プロジェクトに合わせて調整してください。

検証

Flutter プロジェクトを変更した後は、次の手順を実行してください。

  1. 編集した Dart ファイルに対して dart format を実行します。
  2. プロジェクトまたは最も近いパッケージに対して flutter analyze を実行します。
  3. ルートの解析、リダイレクト、シェル/タブの状態、返される結果、またはナビゲーション UI を変更した場合は、対象を絞った flutter test スイートを実行します。
  4. Web の URL を変更した場合、可能であれば Chrome でアプリを実行し、変更したルートについて直接読み込み、更新、戻る、進む、見つからない場合の動作を確認します。
  5. ディープリンクについては、プラットフォームとデバイスが利用できる場合、adb、xcrun simctl、または Flutter DevTools の Deep Links 検証を使って、対象の URL を正確にテストします。
  6. このスキルの Dart アセットのみを変更した場合は、必要な依存関係を含むスクラッチ Flutter アプリで検証した後、dart format --output=none --set-exit-if-changed と flutter analyze を実行します。

検証を実行できない場合は、コマンド、阻害要因、未検証のままのルート動作を報告してください。静的な読み取りだけを根拠に、ナビゲーション、ブラウザー履歴、またはディープリンクの動作を検証済みとして示さないでください。

フォールバック

対象のプロジェクトを利用できない場合は、ユーザーから提供されたファイルのみに基づいてルート計画またはパッチの概要を提示し、未実施の検証を明示してください。アプリにすでに一貫性のないルーティングモデルがある場合は、まず元に戻せる最小限の修正を行い、その後、ルーティング全体を置き換えるのではなく、段階的な移行を提案してください。

コメント