Commit 7c0358b
refactor: アニメリストキャッシュをSharedPreferencesで永続化
既存の実装(#164)を改善し、アプリ終了後も初回ダウンロードフラグを保持するようにしました。
## 変更内容
### 問題点
- 既存実装ではメモリ上のフラグ(_hasFetchedFromServer)でサーバー取得状態を管理
- アプリを再起動するとフラグがリセットされ、毎回約10,000件をダウンロード
- アプリのライフサイクル全体での最適化になっていない
### 解決策
#### 1. SharedPreferencesで永続化
- `_hasDownloadedAnimeList()`: 初回ダウンロード済みかチェック
- `_markAsDownloaded()`: ダウンロード完了をデバイスに保存
- アプリ終了後も初回取得状態を保持
#### 2. 新しいinitAnimeList()メソッド
- 初回ダウンロード済みかチェック
- 未ダウンロード: サーバーから取得してフラグを保存
- ダウンロード済み: Firestoreキャッシュから読み込み
#### 3. app.dartの簡素化
- MultiProviderによるグローバル共有を削除
- 各ページで独立したViewModelインスタンスを作成
- SharedPreferencesによる永続化で状態を共有
#### 4. forceRefreshパラメータ
- 手動更新時は`forceRefresh: true`で強制的にサーバーから取得
- ユーザーが明示的に最新データを取得可能
### 効果
- **真の初回のみ取得**: アプリ再起動しても2回目以降はキャッシュを使用
- **長期的なDB負荷削減**: Firestoreの読み取りコストを大幅に削減
- **ユーザー体験向上**: アプリ起動速度の改善
- **シンプルな実装**: MultiProviderが不要になり、コードが簡潔に
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>1 parent 321044f commit 7c0358b
File tree
5 files changed
+338
-253
lines changed- lib
- ui/animes
- view_model
- view
5 files changed
+338
-253
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | 2 | | |
4 | | - | |
5 | 3 | | |
6 | 4 | | |
7 | 5 | | |
8 | 6 | | |
9 | 7 | | |
10 | 8 | | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
24 | 13 | | |
| 14 | + | |
25 | 15 | | |
26 | 16 | | |
27 | 17 | | |
0 commit comments