flutter-dart-code-review
Officialウィジェットのベストプラクティス、状態管理パターン(BLoC、Riverpod、Provider、GetX、MobX、Signals)、Dartのイディオム、パフォーマンス、アクセシビリティ、セキュリティ、クリーンアーキテクチャをカバーするライブラリに依存しないFlutter/Dartのコードレビューチェックリスト。
What this skill does
When applied, it prepends a system prompt before your request is sent — no extra calls and no change to how you are billed beyond the added tokens.
--- name: flutter-dart-code-review description: ウィジェットのベストプラクティス、状態管理パターン(BLoC、Riverpod、Provider、GetX、MobX、Signals)、Dartのイディオム、パフォーマンス、アクセシビリティ、セキュリティ、クリーンアーキテクチャをカバーするライブラリに依存しないFlutter/Dartのコードレビューチェックリスト。 origin: ECC --- # Flutter/Dartコードレビューベストプラクティス Flutter/Dartアプリケーションをレビューするための包括的なライブラリに依存しないチェックリスト。これらの原則は、どの状態管理ソリューション、ルーティングライブラリ、またはDIフレームワークを使用していても適用されます。 --- ## 1. 全般的なプロジェクトの健全性 - [ ] プロジェクトは一貫したフォルダー構造に従っている(フィーチャーファーストまたはレイヤーファースト) - [ ] 適切な関心の分離: UI、ビジネスロジック、データレイヤー - [ ] ウィジェットにビジネスロジックがない; ウィジェットは純粋にプレゼンテーション - [ ] `pubspec.yaml`が整理されている — 未使用の依存関係がなく、バージョンが適切に固定されている - [ ] `analysis_options.yaml`に厳格なリントセットと厳格なアナライザー設定が含まれている - [ ] 本番コードに`print()`文がない — `dart:developer`の`log()`またはロギングパッケージを使用 - [ ] 生成されたファイル(`.g.dart`、`.freezed.dart`、`.gr.dart`)が最新か`.gitignore`に含まれている - [ ] プラットフォーム固有のコードが抽象化の背後に分離されている --- ## 2. Dart言語の落とし穴 - [ ] **暗黙的なdynamic**: 型アノテーションの欠如が`dynamic`につながる — `strict-casts`、`strict-inference`、`strict-raw-types`を有効にする - [ ] **Null安全の誤用**: 適切なnullチェックやDart 3のパターンマッチング(`if (value case var v?)`)の代わりに過度な`!`(bang演算子) - [ ] **型プロモーションの失敗**: ローカル変数プロモーションが機能する場所で`this.field`を使用 - [ ] **過度に広い例外のキャッチ**: `on`句なしの`catch (e)`; 常に例外型を指定する - [ ] **`Error`のキャッチ**: `Error`のサブタイプはバグを示し、キャッチすべきでない - [ ] **未使用の`async`**: `await`しない`async`マークされた関数 — 不要なオーバーヘッド - [ ] **`late`の過剰使用**: nullable型やコンストラクターの初期化がより安全な場所での`late`の使用; エラーをランタイムに先送りにする - [ ] **ループでの文字列連結**: 繰り返しの文字列構築には`+`の代わりに`StringBuffer`を使用 - [ ] **`const`コンテキストでの可変状態**: `const`コンストラクタークラスのフィールドは可変であるべきでない - [ ] **`Future`の戻り値の無視**: 意図を示すために`await`を使用するか明示的に`unawaited()`を呼び出す - [ ] **`final`が使える場所での`var`**: ローカル変数には`final`を、コンパイル時定数には`const`を優先 - [ ] **相対インポート**: 一貫性のために`package:`インポートを使用 - [ ] **公開された可変コレクション**: パブリックAPIは生の`List`/`Map`ではなく変更不可能なビューを返すべき - [ ] **Dart 3パターンマッチングの欠如**: 冗長な`is`チェックと手動キャストの代わりにswitch式と`if-case`を優先 - [ ] **複数の戻り値のための使い捨てクラス**: 単一使用のDTOの代わりにDart 3のレコード`(String, int)`を使用 - [ ] **本番コードでの`print()`**: `dart:developer`の`log()`またはプロジェクトのロギングパッケージを使用; `print()`はログ
Use this skill
Add a "skill" field with the skill’s ID to your chat completion request. It is applied server-side before your prompt is sent — no extra calls.
{
"model": "gpt-4o-mini",
"skill": "imp-f68ad609-6637-4167-87d6-b75e62137e14",
"messages": [{ "role": "user", "content": "…" }]
}Install the skill, enable it in your dashboard and (optionally) limit it to specific models. It then applies automatically to every matching request — with no "skill" field to send each time.
Set it up in your dashboardMore skills
Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.
Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.
List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.
Create, search, and manage Bear notes via grizzly CLI.
Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.
BluOS CLI (blu) for discovery, playback, grouping, and volume.
Capture frames or clips from RTSP/ONVIF cameras.
Search, install, update, sync, or publish agent skills with the ClawHub CLI and registry.