Flutter缓存管理插件simple_cache_manager的使用

Flutter缓存管理插件simple_cache_manager的使用

Simple Cache Manager 是一个轻量级且高效的缓存解决方案,适用于 Dart 应用程序。它提供了一种简单的方法来缓存和检索数据,并支持可选的过期时间。

特性

  • 使用 safe_local_storage 实现高效的数据存储。
  • 支持自动数据过期的可选缓存持续时间。
  • 可选择性或完全清除缓存。
  • 提供异步/等待 API 以便于集成。
  • 基于 JSON 的结构化数据存储。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  simple_cache_manager: ^0.0.1

然后运行 flutter pub get 来安装包。

使用示例

下面是一个完整的示例 demo,展示了如何使用 simple_cache_manager 插件进行缓存管理。

示例代码

import 'package:flutter/material.dart';
import 'package:simple_cache_manager/simple_cache_manager.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple Cache Manager Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final CacheManager _cacheManager = CacheManager();

  String _cachedData = '';

  // 写入缓存
  Future<void> _writeCache() async {
    await _cacheManager.write(
      'user_data',
      {'name': 'John', 'age': 30},
      cacheDuration: Duration(hours: 1), // 可选
    );
    print('Cached user data');
  }

  // 读取缓存
  Future<void> _readCache() async {
    final userData = await _cacheManager.read('user_data');
    if (userData != null) {
      setState(() {
        _cachedData = 'Name: ${userData['name']}, Age: ${userData['age']}';
      });
    } else {
      setState(() {
        _cachedData = 'No cached data found';
      });
    }
  }

  // 清除特定缓存
  Future<void> _clearSpecificCache() async {
    await _cacheManager.clear('user_data');
    print('Cleared specific cache');
  }

  // 清除所有缓存
  Future<void> _clearAllCache() async {
    await _cacheManager.clearAll();
    print('Cleared all cache');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Simple Cache Manager Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_cachedData),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _writeCache,
              child: Text('Write Cache'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _readCache,
              child: Text('Read Cache'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _clearSpecificCache,
              child: Text('Clear Specific Cache'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _clearAllCache,
              child: Text('Clear All Cache'),
            ),
          ],
        ),
      ),
    );
  }
}

如何工作

Simple Cache Manager 使用 safe_local_storage 将缓存数据以 JSON 格式存储。每个缓存条目都与时间戳和可选的过期持续时间一起存储。当从缓存中读取数据时,管理器会自动检查数据是否已过期,并在必要时清理它。

缓存存储在系统的临时目录中,因此适合那些可以重新生成的非关键数据。

更多特性细节

自动缓存过期

你可以为缓存设置过期时间,例如:

await cacheManager.write(
  'temporary_data',
  {'status': 'processing'},
  cacheDuration: Duration(hours: 1),
);

更多关于Flutter缓存管理插件simple_cache_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter缓存管理插件simple_cache_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 simple_cache_manager 插件在 Flutter 中进行缓存管理的代码示例。simple_cache_manager 是一个流行的 Flutter 插件,用于管理文件缓存,非常适合下载和缓存图像、视频或其他文件。

首先,确保在你的 pubspec.yaml 文件中添加依赖项:

dependencies:
  flutter:
    sdk: flutter
  simple_cache_manager: ^3.0.0  # 请检查最新版本号

然后,运行 flutter pub get 以获取依赖项。

以下是一个完整的示例代码,展示了如何使用 simple_cache_manager 来下载并缓存一个图像文件,然后从缓存中读取它:

import 'package:flutter/material.dart';
import 'package:simple_cache_manager/simple_cache_manager.dart';
import 'package:cached_network_image/cached_network_image.dart'; // 可选,用于显示缓存的图像
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Cache Manager Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CacheDemoScreen(),
    );
  }
}

class CacheDemoScreen extends StatefulWidget {
  @override
  _CacheDemoScreenState createState() => _CacheDemoScreenState();
}

class _CacheDemoScreenState extends State<CacheDemoScreen> {
  final CacheManager _cacheManager = CacheManager();

  @override
  void initState() {
    super.initState();
    // 下载并缓存图像
    _downloadAndCacheImage();
  }

  Future<void> _downloadAndCacheImage() async {
    String url = 'https://example.com/path/to/your/image.jpg';
    File file = await _cacheManager.getSingleFile(url);
    print('Cached file path: ${file.path}');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Cache Manager Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 使用 CachedNetworkImage 显示缓存的图像
            CachedNetworkImage(
              imageUrl: 'https://example.com/path/to/your/image.jpg',
              placeholder: (context, url) => CircularProgressIndicator(),
              errorWidget: (context, url, error) => Icon(Icons.error),
            ),
            SizedBox(height: 20),
            // 按钮,点击后清除缓存
            ElevatedButton(
              onPressed: () async {
                await _cacheManager.emptyCache();
                print('Cache cleared');
              },
              child: Text('Clear Cache'),
            ),
          ],
        ),
      ),
    );
  }
}

解释:

  1. 依赖项:在 pubspec.yaml 文件中添加 simple_cache_manager 依赖项。
  2. CacheManager:在代码中创建 CacheManager 实例。
  3. 下载和缓存:使用 _cacheManager.getSingleFile(url) 方法下载并缓存图像文件。此方法返回一个 File 对象,表示缓存的文件。
  4. 显示缓存图像:使用 CachedNetworkImage 小部件(来自 cached_network_image 插件,虽然它不是 simple_cache_manager 的一部分,但通常一起使用以方便显示缓存的图像)。
  5. 清除缓存:提供一个按钮,点击后调用 _cacheManager.emptyCache() 方法清除所有缓存。

请注意,simple_cache_manager 本身主要用于文件缓存管理,而 CachedNetworkImage 则是一个方便的组件,用于显示网络图像并自动处理缓存。根据你的需求,你可以选择是否使用 CachedNetworkImage

回到顶部