SPEC_01_画面機能仕様書 の仕様をもとに,実装の順序とステップを定義する. 各ステップは 1 つのブランチ・PR に対応させる.
本書は初期フェーズ(Step 1〜5)の開発計画である. 当時は撮影フォーマットとして PNG(非圧縮)を前提としていた.その後,撮影高速化のネイティブ化 → カメラ診断 → DNG 定量モードへの転換 → プレビュー JPEG → 画素統計,と大きく展開している. 定量モード転換以降の実装の経緯・設計判断は PROGRESS.md に, 最新の確定仕様は SPEC_01_画面機能仕様書 に記録している. 以下の各ステップ(Step 3 の PNG 保存など)は当時の計画であり,現行仕様とは異なる点がある.
| # | ステップ | 概要 | 依存 |
|---|---|---|---|
| 1 | プロジェクト基盤 | アプリ骨格,テーマ,画面遷移,Provider 登録 | — |
| 2 | カメラプレビュー | インカメラのライブプレビュー表示(180° 回転) | 1 |
| 3 | 撮影・保存 | シャッターボタン,PNG 保存,ファイル命名 | 2 |
| 4 | 一覧・削除 | サムネイルグリッド,拡大表示,画像削除 | 3 |
| 5 | 仕上げ | パーミッション UX 改善,エラーハンドリング,手動テスト | 4 |
アプリの骨格を構築し,画面遷移が動作する状態にする.
main.dart — runApp() で Provider を登録し,アプリを起動するapp.dart — MaterialApp の定義,テーマ設定screens/capture_screen.dart — 撮影画面の空のスキャフォールドscreens/gallery_screen.dart — 一覧画面の空のスキャフォールドBottomNavigationBar による 2 タブ切り替えTransform.rotate)dart analyze / dart format がクリーンfeature/app-foundation
インカメラのライブプレビューを撮影画面に表示する.
services/permission_service.dart — カメラ権限の確認・要求providers/camera_provider.dart — カメラの初期化・プレビュー制御・ライフサイクル管理widgets/camera_preview.dart — CameraPreview ウィジェットscreens/capture_screen.dart — カメラプレビューの組み込みfeature/camera-preview
シャッターボタンで撮影し,PNG 形式でストレージに保存する.
services/file_service.dart — PNG 保存,ファイル名生成,重複回避ロジックwidgets/shutter_button.dart — シャッターボタン UIproviders/camera_provider.dart — 撮影実行メソッドの追加screens/capture_screen.dart — シャッターボタンの組み込み,撮影成功時のスナックバーFileService のファイル名生成ロジックの Unit テストFileService の重複回避ロジックの Unit テストPictures/MiniTIAS/ に MiniTIAS_YYYYMMDD_HHmmss.png 形式で保存されるfeature/capture-save
撮影済み画像の一覧表示,拡大確認,削除機能を実装する.
providers/gallery_provider.dart — 画像一覧の取得・キャッシュ・削除操作widgets/image_grid.dart — 3 列サムネイルグリッドwidgets/image_detail_dialog.dart — 拡大表示ダイアログ(ピンチズーム,削除ボタン)
※ 実際には独立ダイアログではなく,一覧画面内のインライン Stack オーバーレイとして実装した(このファイルは存在しない.SPEC_01 参照)screens/gallery_screen.dart — グリッド・ダイアログの組み込み,空状態メッセージGalleryProvider の一覧取得・削除ロジックの Unit テストfeature/gallery-delete
パーミッション UX の改善,エラーハンドリングの強化,全体の動作確認を行う.
dart analyze / flutter test がクリーンfeature/polish-permissions