レシピ記録と動画を検索・閲覧するアプリです。
本アプリを通して Flutter アプリ開発におけるアーキテクチャの検討やライブラリ利用のスキルを習得することを目的にしています(技術 showcase)。
iOS | |
---|---|
Web | macOS |
---|---|
Platform | Android | iOS | Web | macOS | Windows |
---|---|---|---|---|---|
Status | ✅ | ✅ | ✅ | ✅ | N/A |
Tool | Version |
---|---|
Flutter | 3.19.4 |
Xcode | 15.3 |
Android Studio |
Single Source of Truth(SSOT)とコマンドクエリ責務分離(CQRS)を意識した単方向データフロー
graph LR;
Presentation-->|watch|Store
Presentation-->|call|Service
Service-->|call|Repository
Service-->|update|Store
- Presentation
- Widget など
- Store
- 状態の保持、主に NotifierProvier で実装
- State の更新は Service 経由で行う
- Presentation から watch することで状態をリアクティブに UI に反映させる
- Service
- UI の操作に基づいて処理を行う
- 主に Repository に対する操作を行いデータを取得する
- 取得したデータに基づいて Store を更新する
- 状態は持たない
- UI の操作に基づいて処理を行う
- Repository
- 外部サービス、API、データベースなどのデータソースからデータを取得
lib
├── i18n # 国際化関連(slang)
├── model # モデルの定義
├── provider # クラスのインスタンスを提供する Provider の定義
├── repository # データソース (API, DB)
│ └── drift # Drift
├── service # ビジネスロジックの実装
├── store # 状態管理
└── ui # UI
├── common # 共通コンポーネント
├── error # エラー画面
├── favorite # お気に入り
├── navigation # ナビゲーション
├── recipe # レシピ
├── settings # 設定
├── video # 動画
└── video_player # 動画プレイヤー
- DI
- Data store
- UI
- i18n
- Other
- 後述の別のリポジトリを使って YouTube の情報を定期的に取得して Algolia にインポートしている
- YouTube Data API
Android および iOS のみ対応、--dart-define=FLAVOR=...
で切り替え
Flavor | 用途 | 配布方法 | BundleID prefix |
---|---|---|---|
prod | 本番用 | PlayConsole, TestFlight | |
stg | ステージング | Firebase App Distribution | .stg |
dev | 開発用 | ローカルビルド | .dev |
- Widget Test
- VRT(Visual Regression Testing)
- Check
- flutter format
- flutter analyze
- Test
- flutter test
- VRT(Visual Regression Testing)
- Bumpup
- pubspec.yaml の
version:
のインクリメント
- pubspec.yaml の
- Deliver(build & deploy)
- stg
- Firebase App Distribution
- prod
- Google Play, App Store Connect(Test Flight)
- pages
- GitHub Pages
- stg
- Nightly build
- yorifuji/buzz_recipe_importer
- YouTube のチャンネルの動画の情報を定期的に取得して Algolia にインポートする Python プログラム
- GitHub Actions で定期実行している