本ドキュメントでは,SmTIAS-Capture のアーキテクチャ(コード構成)と非機能要件を定義する.
provider パッケージを使用する| Provider | 責務 |
|---|---|
CameraProvider | カメラの初期化・プレビュー制御・撮影実行・ライフサイクル管理 |
GalleryProvider | 画像一覧の取得・キャッシュ・削除操作 |
DiagnosticsProvider | カメラ診断の実行・結果保存(インフラのみ・UI 非表示) |
lib/
├── main.dart # アプリエントリポイント,Provider 登録
├── app.dart # MaterialApp 定義,テーマ設定,180° 回転
├── models/
│ ├── display_orientation.dart # 表示向き設定(ライブ/スナップショット両系統の単一の真実)
│ ├── preview_frame.dart # プレビューストリームの YUV フレーム保持(不変)
│ └── preview_region.dart # プレビュークロップ領域(正規化矩形・不変)
├── providers/
│ ├── camera_provider.dart # カメラ制御の状態管理
│ ├── gallery_provider.dart # 画像一覧の状態管理
│ └── diagnostics_provider.dart # カメラ診断(インフラのみ)
├── screens/
│ ├── home_screen.dart # BottomNavigationBar による画面切替
│ ├── capture_screen.dart # 撮影画面 (S-01)
│ └── gallery_screen.dart # 一覧画面 (S-02)
├── widgets/
│ ├── camera_preview.dart # カメラプレビューウィジェット
│ ├── oriented_preview.dart # 表示向き変換の適用(クロップ元)
│ ├── region_crop.dart # 領域クロップ拡大表示(ライブ/スナップショット共通)
│ ├── cropped_snapshot.dart # 保存中スナップショットのクロップ表示
│ ├── shutter_button.dart # シャッターボタン
│ └── image_grid.dart # サムネイルグリッド
└── services/
├── file_service.dart # ファイル保存・命名・削除
├── permission_service.dart # パーミッション管理
├── preview_region_service.dart # プレビュークロップ領域の config 読み込み
├── raw_capture_service.dart # ネイティブ撮影(DNG/PNG)・診断の MethodChannel
└── sound_service.dart # シャッター音・保存完了音の制御
※ 撮影・画像変換・診断の実処理は Android ネイティブ
android/.../RawCapturePlugin.kt(Camera2 / DngCreator)が担い,
raw_capture_service.dart が MethodChannel で橋渡しする.
┌─────────────────────────────────┐ │ Screens(画面) │ UI 層: ウィジェット構築のみ ├─────────────────────────────────┤ │ Widgets(部品) │ 再利用可能な UI コンポーネント ├─────────────────────────────────┤ │ Providers(状態管理) │ ビジネスロジック・状態保持 ├─────────────────────────────────┤ │ Services(サービス) │ 外部リソースとのインタフェース └─────────────────────────────────┘
context.watch / context.read で参照し,直接 Service を呼ばないflutter.minSdkVersion(android/app/build.gradle.kts が参照する Flutter 規定値)