/romasaga-status-flutter-app

Flutter学習用に作成したロマサガRSのステータス管理アプリ

Primary LanguageDartApache License 2.0Apache-2.0

platform test workflow GitHub Release

RSApp

ロマサガRSの所持キャラステータス管理用アプリです。Flutter学習用として作成しました。
assetsを管理対象外にすると吹っ飛んだ時に辛すぎたのでもう管理対象にしていいかと思いました。

設計

レイヤー分けしておりViewControllerModelRepositoryで大きく分けています。 データ取得層はRepositoryパターンを採用しています。

Controllerは基本以下の3構成としています。
2は画面起動時にキャラIDなどの引数をもらうProviderを生成している場合に作っていています。引数がない場合は1と2はまとめています。 また、note_pageなどUiStateを作ると煩雑になる場合は1のみ実装しています。

  1. 画面起動時のProvider(riverpodアノテーションで生成)
  2. ロジックを集約したProvider
  3. UiStateを保持するStateProvider

UiStateを保持するStateProviderはそのまま画面の状態を保持します。
ただし、キャラ詳細画面やステータス編集画面など前の画面の詳細情報を扱う場合、キャラデータをUiStateで持ってしまうより直接参照・更新した方がSSOTに沿えるためUiStateでは管理していません。
また、UiStateprivateにしていてViewからwatchするProviderは別に定義しています。
UiStateの値はそれぞれselectwatchすることで「UiStateは必ずViewModelを経由して更新する」という設計にしました。

今のところこのような設計で落ち着きました。

Firebase

Firebaseで利用しているサービスは次の通りです。

  • Authentication
    • Googleアカウントと連携しています。サインイン状態だと入力したキャラデータのバックアップと復元ができるようになります。
  • Storage
    • キャラデータをjsonで持っています。
  • Firestore
    • 自身で入力したステータス情報のバックアップと復元に使います。
  • Crashlytics
    • クラッシュレポート

環境

実際に使っているアプリとデバッグ用のアプリはBuildTypeで分割しています。
キャラデータが全て入ったjsonをいちいち読み込んで動作確認するのが辛かったため、動作確認はmain_dev.dartで開発用のjsonを読み込むようにしています。
開発はvscodeでやっているのでlaunch.jsonのprogramにこのdartファイルを指定してデバッグしています。
launch.json例です。

{
  "configurations": [
    {
      "name": "romansing_saga_app",
      "request": "launch",
      "type": "dart",
      "program": "lib/main_dev.dart",
    }
  ]
}

画面イメージ一部

01 02 03 04 05