# Bagisto App Demo

## 概要

Bagistoオープンソースeコマースプラットフォームのモバイルアプリケーションです。FlutterフレームワークとGraphQL APIを活用し、Bagistoストアとリアルタイム同期する機能豊富なモバイルショッピング体験を提供します。iOS、Android、Web、macOS、Linux、Windowsのマルチプラットフォームに対応しています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| ホームページ | カルーセルスライダー、バナー、新着商品、カテゴリ表示、動的HTMLコンテンツ対応 |
| 商品管理 | 全商品タイプ対応（シンプル、設定可能、バンドル、ダウンロード、ブッキング等）、カスタマイズオプション |
| カテゴリ・検索 | カテゴリナビゲーション、サブカテゴリ対応、音声検索、フィルター・ソート機能 |
| カート・チェックアウト | カート管理、クーポン適用、配送先住所管理、ゲストチェックアウト、複数決済方法 |
| 決済 | 代金引換、銀行振込、PayPal Standard、PayPal Smart Button対応 |
| ウィッシュリスト | 商品のウィッシュリスト追加・削除、ウィッシュリスト共有 |
| 商品比較 | 複数商品の比較機能 |
| ユーザーアカウント | サインアップ・サインイン、プロフィール管理、注文履歴、住所帳、指紋認証ログイン |
| 注文管理 | 注文詳細表示、請求書・配送・返金情報、注文キャンセル、再注文 |
| レビュー | 商品レビューの閲覧・投稿 |
| 通知 | Firebase Cloud Messagingによるプッシュ通知 |
| テーマ | ダークモード・ライトモード切替、カスタムテーマカラー |
| 多言語・通貨 | 8言語対応（英語、フランス語、オランダ語、トルコ語、スペイン語、アラビア語、ポルトガル語、ヒンディー語）、複数通貨対応 |
| 位置情報 | Google Maps連携、住所自動入力 |
| ダウンロード商品 | ダウンロード可能商品の購入・管理 |
| CMS | CMSページ表示、お問い合わせフォーム |

## 技術スタック

### コア

- フレームワーク: Flutter 3.32.5
- 言語: Dart 3.8.1
- バックエンド連携: GraphQL API (Bagisto Headless eCommerce)
- 状態管理: flutter_bloc (BLoCパターン)
- ローカルストレージ: Hive、GetStorage
- 通知: Firebase Cloud Messaging

### 主要ライブラリ

- graphql_flutter: GraphQLクライアント
- flutter_bloc: 状態管理
- firebase_core / firebase_messaging: Firebase連携・プッシュ通知
- flutter_local_notifications: ローカル通知
- hive / hive_generator: 高速ローカルデータベース
- get_storage: キーバリューストレージ
- cached_network_image: 画像キャッシュ
- google_fonts: カスタムフォント
- google_maps_flutter / geocoding / location: 位置情報・地図
- speech_to_text: 音声認識
- local_auth: 生体認証
- flutter_paypal_payment: PayPal決済
- webview_flutter / flutter_inappwebview: WebView
- carousel_slider: カルーセルUI
- flutter_widget_from_html / flutter_html: HTML描画
- image_picker / file_picker: ファイル選択
- share_plus: コンテンツ共有
- dio / retrofit: HTTP通信
- provider: 依存性注入
- lottie: アニメーション
- skeleton_loader: ローディングUI
- overlay_support: オーバーレイ通知
- flutter_rating_bar: レーティングUI

## ディレクトリ構成

```
opensource-ecommerce-mobile-app-main/
├── android/                    # Androidプラットフォーム固有コード
├── ios/                        # iOSプラットフォーム固有コード
├── macos/                      # macOSプラットフォーム固有コード
├── linux/                      # Linuxプラットフォーム固有コード
├── windows/                    # Windowsプラットフォーム固有コード
├── web/                        # Webプラットフォーム固有コード
├── lib/                        # メインソースコード
│   ├── main.dart               # アプリケーションエントリーポイント
│   ├── data_model/             # データモデル定義
│   ├── screens/                # 画面コンポーネント
│   │   ├── home_page/          # ホームページ
│   │   ├── product_screen/     # 商品詳細
│   │   ├── cart_screen/        # カート
│   │   ├── checkout/           # チェックアウトフロー
│   │   ├── categories_screen/  # カテゴリ一覧
│   │   ├── search_screen/      # 検索
│   │   ├── wishList/           # ウィッシュリスト
│   │   ├── compare/            # 商品比較
│   │   ├── orders/             # 注文一覧
│   │   ├── order_detail/       # 注文詳細
│   │   ├── account/            # アカウント管理
│   │   ├── sign_in/            # サインイン
│   │   ├── sign_up/            # サインアップ
│   │   ├── drawer/             # ナビゲーションドロワー
│   │   ├── review/             # レビュー
│   │   ├── address_list/       # 住所一覧
│   │   ├── location/           # 位置情報
│   │   ├── downloadable_products/ # ダウンロード商品
│   │   ├── cms_screen/         # CMSページ
│   │   ├── contact_us/         # お問い合わせ
│   │   ├── splash_screen/      # スプラッシュ画面
│   │   └── ...                 # その他画面
│   ├── services/               # APIサービス・データ取得
│   ├── utils/                  # ユーティリティ
│   │   ├── server_configuration.dart  # サーバー設定
│   │   ├── mobikul_theme.dart         # テーマ設定
│   │   ├── app_navigation.dart        # ルーティング
│   │   ├── application_localization.dart # 多言語化
│   │   ├── push_notifications_manager.dart # プッシュ通知
│   │   └── ...                        # その他ユーティリティ
│   └── widgets/                # 共通ウィジェット
├── assets/                     # 静的リソース
│   ├── images/                 # 画像ファイル
│   ├── lottie/                 # Lottieアニメーション
│   ├── language/               # 多言語JSONファイル
│   ├── fonts/                  # カスタムフォント
│   └── web/                    # Web用スタイル
├── maestro/                    # E2Eテスト (Maestro)
├── test/                       # ユニットテスト
├── Docs/                       # ドキュメント
├── pubspec.yaml                # 依存関係定義
├── analysis_options.yaml       # 静的解析設定
├── CHANGELOG.md                # 変更履歴
├── Configuration_guide.md      # 設定ガイド
├── README.md                   # プロジェクト説明
└── LICENSE                     # MITライセンス
```

## セットアップ

### 必要条件

- Flutter 3.32.5以上
- Dart 3.8.1以上
- Android Studio Meerkat 2024.3.1 Patch 2以上
- Xcode 16.3以上（iOS/macOS開発時）
- Bagisto v2.3.6（バックエンド）
- Bagisto Headless eCommerce APIモジュール

### 最小動作環境

- Android: API Level 22以上
- iOS: 16以上

### インストール手順

1. リポジトリをクローン

```sh
git clone https://github.com/bagisto/opensource-ecommerce-mobile-app.git
cd opensource-ecommerce-mobile-app
```

2. 依存関係をインストール

```sh
flutter pub get
```

3. 必要なファイルを生成

```sh
flutter pub run build_runner build --delete-conflicting-outputs
```

4. サーバー設定を更新

`lib/utils/server_configuration.dart` を編集し、`baseDomain` にBagistoストアのURLを設定

```dart
const String baseDomain = "https://your-bagisto-store.com";
```

5. アプリを実行

```sh
flutter run
```

### プッシュ通知設定

- Android: `android/app/` に `google-services.json` を配置
- iOS: `ios/Runner/` に `GoogleService-Info.plist` を配置

### テーマカスタマイズ

`lib/utils/mobikul_theme.dart` でプライマリカラー・アクセントカラーを変更可能

## 開発

### 静的解析

```sh
flutter analyze
```

静的解析設定は `analysis_options.yaml` で定義されています。`flutter_lints` パッケージの推奨ルールを使用しています。

### ユニットテスト

```sh
flutter test
```

### E2Eテスト (Maestro)

`maestro/` ディレクトリにMaestroフレームワークを使用したE2Eテストが含まれています。

テストカテゴリ:
- `auth/`: 認証フロー（ログイン、サインアップ、ログアウト、パスワードリセット）
- `home/`: ホームページ機能（カテゴリ表示、商品一覧、バナー）
- `plp/`: 商品一覧ページ（カテゴリナビゲーション、フィルター、ソート）
- `pdp/`: 商品詳細ページ（カート追加、ウィッシュリスト、バリエーション選択）
- `cart/`: カート機能（数量更新、クーポン適用、配送見積もり）
- `checkout/`: チェックアウトフロー（住所管理、配送方法、決済）
- `account/`: アカウント機能（プロフィール更新、注文履歴、住所帳）
- `wishlist/`: ウィッシュリスト機能

### コード生成

JSON シリアライズやHiveアダプターの再生成:

```sh
flutter pub run build_runner build --delete-conflicting-outputs
```

### 対応言語

多言語ファイルは `assets/language/` に配置されています:
- en.json (英語)
- fr.json (フランス語)
- nl.json (オランダ語)
- tr.json (トルコ語)
- es.json (スペイン語)
- ar.json (アラビア語)
- pt_BR.json (ポルトガル語・ブラジル)
- hi_IN.json (ヒンディー語)

### 決済方法

`lib/utils/server_configuration.dart` で有効な決済方法を設定:
- cashondelivery (代金引換)
- moneytransfer (銀行振込)
- paypal_standard (PayPal Standard)
- paypal_smart_button (PayPal Smart Button)
