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
更多关于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'),
),
],
),
),
);
}
}
解释:
- 依赖项:在
pubspec.yaml
文件中添加simple_cache_manager
依赖项。 - CacheManager:在代码中创建
CacheManager
实例。 - 下载和缓存:使用
_cacheManager.getSingleFile(url)
方法下载并缓存图像文件。此方法返回一个File
对象,表示缓存的文件。 - 显示缓存图像:使用
CachedNetworkImage
小部件(来自cached_network_image
插件,虽然它不是simple_cache_manager
的一部分,但通常一起使用以方便显示缓存的图像)。 - 清除缓存:提供一个按钮,点击后调用
_cacheManager.emptyCache()
方法清除所有缓存。
请注意,simple_cache_manager
本身主要用于文件缓存管理,而 CachedNetworkImage
则是一个方便的组件,用于显示网络图像并自动处理缓存。根据你的需求,你可以选择是否使用 CachedNetworkImage
。