Communityコーディング&開発github.com

flutter/flutter-caching-data

Flutterアプリにキャッシュ戦略を実装し、パフォーマンスとオフラインサポートを向上させます。ネットワークリクエストを減らしたり起動を高速化するためにアプリデータをローカルに保持する際に使用します。

flutter-caching-data とは?

このスキルは、Flutterアプリにおけるデータキャッシュ戦略の実装を支援します。ネットワークリクエストの削減、起動時間の短縮、オフライン時のデータ可用性向上を目的としており、特にAPIデータや画像、設定情報の永続化に役立ちます。主なプラットフォームはFlutter(Dart)で、sqflite、shared_preferences、hive、cached_network_imageなどの一般的なパッケージを活用した実装例を提供します。キャッシュの有効期限管理、メモリキャッシュとディスクキャッシュの使い分け、オフラインファースト設計のパターンを学べるため、ユーザー体験を向上させたいFlutter開発者に最適です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flutter/skills/tree/main/skills/flutter-caching-data

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

flutter-caching-data は何をしますか?

Flutterアプリにキャッシュ戦略を実装し、パフォーマンスとオフラインサポートを向上させます。ネットワークリクエストを減らしたり起動を高速化するためにアプリデータをローカルに保持する際に使用します。

主な機能

  • データキャッシュ: APIレスポンスなどをローカルに保存し、高速なデータアクセスを実現
  • 画像キャッシュ: ネットワーク画像をキャッシュして読み込み時間を短縮
  • 設定情報の永続化: ユーザー設定やアプリ状態をローカルに保持
  • キャッシュ有効期限管理: 古いデータを自動的に無効化
  • メモリとディスクの階層化キャッシュ: 用途に応じて最適なストレージを選択

対応プラットフォーム

  • Flutter(Dart)
  • モバイル(iOS/Android)、Web、デスクトップ

実装例

APIデータのキャッシュ(sqflite使用)

import 'package:sqflite/sqflite.dart';

class CacheManager {
  static Database? _database;

  static Future<Database> get database async {
    if (_database != null) return _database!;
    _database = await openDatabase(
      'app_cache.db',
      version: 1,
      onCreate: (db, version) async {
        await db.execute('''
          CREATE TABLE cache (
            key TEXT PRIMARY KEY,
            data TEXT NOT NULL,
            expiresAt INTEGER NOT NULL
          )
        ''');
      },
    );
    return _database!;
  }

  static Future<void> set(String key, String data, {Duration ttl = const Duration(hours: 1)}) async {
    final db = await database;
    final expiresAt = DateTime.now().millisecondsSinceEpoch + ttl.inMilliseconds;
    await db.insert(
      'cache',
      {'key': key, 'data': data, 'expiresAt': expiresAt},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  static Future<String?> get(String key) async {
    final db = await database;
    final result = await db.query(
      'cache',
      where: 'key = ? AND expiresAt > ?',
      whereArgs: [key, DateTime.now().millisecondsSinceEpoch],
    );
    if (result.isEmpty) return null;
    return result.first['data'] as String;
  }

  static Future<void> clear() async {
    final db = await database;
    await db.delete('cache');
  }
}

設定情報の永続化(shared_preferences使用)

import 'package:shared_preferences/shared_preferences.dart';

class SettingsCache {
  static Future<void> saveString(String key, String value) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString(key, value);
  }

  static Future<String?> getString(String key) async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getString(key);
  }
}

画像キャッシュ(cached_network_image使用)

import 'package:cached_network_image/cached_network_image.dart';

class CachedImageWidget extends StatelessWidget {
  final String imageUrl;

  const CachedImageWidget({Key? key, required this.imageUrl}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return CachedNetworkImage(
      imageUrl: imageUrl,
      placeholder: (context, url) => CircularProgressIndicator(),
      errorWidget: (context, url, error) => Icon(Icons.error),
    );
  }
}

キャッシュ戦略のベストプラクティス

  1. 適切なTTLを設定する: データの鮮度要件に応じて有効期限を調整
  2. オフラインファースト設計: 可能な限りキャッシュからデータを取得し、バックグラウンドで更新
  3. エラーハンドリング: キャッシュエラーが発生した場合でもアプリがクラッシュしないようにする
  4. ストレージ制限の考慮: 大量のデータをキャッシュする場合は定期的なクリーンアップを実施

参考リソース

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

flutter/flutter-accessibility

Configure your Flutter app to support assistive technologies like Screen Readers

flutter/flutter-accessibility-audit

Triggers an accessibility scan through the widget_inspector and automatically adds Semantics widgets or missing labels to the source code.

flutter/flutter-adding-home-screen-widgets

Adds home screen widgets to a Flutter app for Android and iOS. Use when providing glanceable app information or quick actions on the device home screen.

flutter/flutter-add-integration-test

Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests. Use when adding integration testing to a project, exploring UI components via MCP, or automating user flows with the integration_test package.

flutter/flutter-add-widget-preview

Adds interactive widget previews to the project using the previews.dart system. Use when creating new UI components or updating existing screens to ensure consistent design and interactive testing.

flutter/flutter-add-widget-test

Implement a component-level test using `WidgetTester` to verify UI rendering and user interactions (tapping, scrolling, entering text). Use when validating that a specific widget displays correct data and responds to events as expected.

flutter/flutter-animating-apps

Implements animated effects, transitions, and motion in a Flutter app. Use when adding visual feedback, shared element transitions, or physics-based animations.

flutter/flutter-animation

Add animated effects to your Flutter app

flutter/flutter-apply-architecture-best-practices

Architects a Flutter application using the recommended layered approach (UI, Logic, Data). Use when structuring a new project or refactoring for scalability.

flutter/flutter-app-size

Measure and reduce the size of the Flutter app bundle, APK, or IPA

flutter/flutter-architecting-apps

Architects a Flutter application using the recommended layered approach (UI, Logic, Data). Use when structuring a new project or refactoring for scalability.

flutter/flutter-architecture

Use the Flutter team's recommended app architecture

flutter/flutter-building-forms

Builds Flutter forms with validation and user input handling. Use when creating login screens, data entry forms, or any multi-field user input.

flutter/flutter-building-layouts

Builds Flutter layouts using the constraint system and layout widgets. Use when creating or refining the UI structure of a Flutter application.

flutter/flutter-building-plugins

Builds Flutter plugins that provide native interop for other apps to use. Use when creating reusable packages that bridge Flutter with platform-specific functionality.

flutter/flutter-build-responsive-layout

Use `LayoutBuilder`, `MediaQuery`, or `Expanded/Flexible` to create a layout that adapts to different screen sizes. Use when you need the UI to look good on both mobile and tablet/desktop form factors.

flutter/flutter-caching

Cache data in a Flutter app

flutter/flutter-concurrency

Execute long-running tasks in a background thread in Flutter

flutter/flutter-databases

Work with databases in a Flutter app

flutter/flutter-embedding-native-views

Embeds native Android, iOS, or macOS views into a Flutter app. Use when integrating complex native components like maps or web views.

関連スキル