Skip to content

Commit 7c0358b

Browse files
KOU050223claude
andcommitted
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

5 files changed

+338
-253
lines changed

lib/app.dart

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,17 @@
11
import 'package:animeishi/ui/auth/view/auth_page.dart';
2-
import 'package:animeishi/ui/animes/view_model/anime_list_view_model.dart';
32
import 'package:flutter/material.dart';
4-
import 'package:provider/provider.dart';
53

64
class MyApp extends StatelessWidget {
75
const MyApp({super.key});
86

97
@override
108
Widget build(BuildContext context) {
11-
return MultiProvider(
12-
providers: [
13-
// アプリケーション全体でAnimeListViewModelを共有
14-
ChangeNotifierProvider(
15-
create: (_) => AnimeListViewModel(),
16-
),
17-
],
18-
child: MaterialApp(
19-
title: 'アニ名刺',
20-
theme: ThemeData(
21-
primarySwatch: Colors.blue,
22-
),
23-
home: AuthPage(),
9+
return MaterialApp(
10+
title: 'アニ名刺',
11+
theme: ThemeData(
12+
primarySwatch: Colors.blue,
2413
),
14+
home: AuthPage(),
2515
);
2616
}
2717
}

0 commit comments

Comments
 (0)