Flutter数据缓存插件cache_x的使用
Flutter数据缓存插件CacheX的使用
介绍
CacheX 是一个适用于 Flutter 的可行的数据缓存包,支持加密存储任何类型的数据。它使用 SharedPreference
作为存储介质,并在后台使用 AES 加密和解密数据,以确保数据的安全性。
工作原理
缓存本质上是简单的键值对数据保存过程。CacheX 采用这种方式进行数据缓存。由于安全问题,我们不能直接保存原始数据。因此,CacheX 在缓存数据或从缓存中获取数据时,会在后台使用 AES 加密和解密。
示例项目截图
入门指南
1. 添加依赖
首先,在 pubspec.yml
文件中添加 CacheX 依赖:
dependencies:
cache_x: ^latest
请从 pub.dev 获取最新版本号。
2. 初始化 CacheX
在应用的 main
函数中初始化 CacheX。密码长度必须为 128/192/256 位(即 16、24 或 32 个字符)。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化密码
String password = 'CBoaDQIQAgceGg8dFAkMDBEOECEZCxg=';
// 初始化 CacheX
final cacheX = CacheXCore();
await cacheX.init(password: password);
// 执行应用的其他初始化工作
runApp(MyApp());
}
3. 保存和获取数据
你可以使用 CacheX 保存和获取不同类型的数据。以下是一个完整的示例代码,展示了如何保存和获取布尔值、双精度浮点数、整数、字符串和字符串列表。
import 'package:cache_x/cache_x.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化密码
String password = 'CBoaDQIQAgceGg8dFAkMDBEOECEZCxg=';
// 初始化 CacheX
final cacheX = CacheXCore();
await cacheX.init(password: password);
// 设置值
await cacheX.saveBool(key: 'dark_mode', value: true);
await cacheX.saveDouble(key: 'user_rating', value: 4.5);
await cacheX.saveInt(key: 'user_age', value: 25);
await cacheX.saveString(key: 'user_name', value: 'Tanvir');
await cacheX.saveStringList(
key: 'favorite_colors',
value: ['Red', 'Green', 'Blue'],
);
// 获取值
print('Dark Mode: ${await cacheX.getBool(key: 'dark_mode', defaultValue: false)}');
print('User Rating: ${await cacheX.getDouble(key: 'user_rating', defaultValue: 0.0)}');
print('User Age: ${await cacheX.getInt(key: 'user_age', defaultValue: 0)}');
print('User Name: ${await cacheX.getString(key: 'user_name', defaultValue: 'Unknown')}');
print('Favorite Colors: ${await cacheX.getStringList(key: 'favorite_colors', defaultValue: [])}');
print('All Keys: ${await cacheX.getKeys()}');
// 检查是否存在某个键
print('Does key "user_name" exist? ${await cacheX.containsKey(key: 'user_name')}');
// 删除某个键
await cacheX.remove(key: 'user_name');
print('User Name after removal: ${await cacheX.getString(key: 'user_name', defaultValue: 'Unknown')}');
// 清除所有缓存
await cacheX.clear();
print('All Keys after clearing: ${await cacheX.getKeys()}');
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'CacheX Example',
home: Scaffold(
appBar: AppBar(
title: Text('CacheX Example'),
),
body: Center(
child: Text('Check the console for cached data!'),
),
),
);
}
}
注意事项
- 密码长度:密码必须是 128/192/256 位(即 16、24 或 32 个字符)。否则会抛出异常。
- 默认值:在
get
方法中提供defaultValue
,否则如果键不存在或数据类型不匹配,将返回null
。 - 异步操作:所有
save
方法都返回Future<bool>
,因此需要使用await
来获取结果。 - 异常处理:CacheX 可能会抛出以下几种异常:
CacheXException
:当 CacheXCore 初始化失败或发生其他内部错误时。StorageException
:当保存或获取数据时发生错误时。EncryptionException
:当加密或解密数据时发生错误时。
高级用法:与 Parse Server 集成
如果你在项目中使用了 parse_server_sdk_flutter
,可以将 CacheX 作为默认的核心存储库。只需在初始化 Parse 时指定 CoreStoreCacheXImpl
即可。
import 'package:cache_x/core_store_cacheX_impl.dart';
import 'package:parse_server_sdk_flutter/parse_server_sdk_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Parse
await Parse().initialize(
'your_app_id',
'your_server_url',
clientKey: 'your_client_key',
liveQueryUrl: 'your_live_query_url',
coreStore: await CoreStoreCacheXImpl.getInstance(
password: 'u0TCHVOIiEFVwOqqDo1OnLfd3Kx7yaRt',
),
debug: true,
autoSendSessionId: true,
);
// 现在可以直接使用 CacheX 进行本地存储
final cacheX = CacheXCore.instance;
await cacheX.saveString(key: 'ft1', value: 'Tanvir');
print(await cacheX.getString(key: 'ft1'));
}
更多关于Flutter数据缓存插件cache_x的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据缓存插件cache_x的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用cache_x
插件进行数据缓存的示例。cache_x
是一个功能强大的Flutter缓存库,支持内存缓存和持久化缓存。
首先,确保你已经在pubspec.yaml
文件中添加了cache_x
依赖:
dependencies:
flutter:
sdk: flutter
cache_x: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
示例代码
以下是一个简单的示例,展示了如何使用cache_x
进行内存缓存和持久化缓存。
1. 初始化缓存管理器
首先,我们需要初始化一个CacheManager
实例。你可以在应用启动时进行这个操作。
import 'package:cache_x/cache_x.dart';
import 'package:flutter/material.dart';
void main() {
// 初始化CacheManager实例
CacheManager cacheManager = CacheManager(
config: CacheConfig(
defaultDuration: const Duration(minutes: 10), // 设置默认缓存时间
maxNrOfCacheObjects: 100, // 设置最大缓存对象数量
storeInMemory: true, // 是否启用内存缓存
storeInPersistence: true, // 是否启用持久化缓存
persistentCacheDir: 'my_cache_dir', // 设置持久化缓存目录
),
);
runApp(MyApp(cacheManager: cacheManager));
}
class MyApp extends StatelessWidget {
final CacheManager cacheManager;
MyApp({required this.cacheManager});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(cacheManager: cacheManager),
);
}
}
2. 使用缓存管理器获取和存储数据
在HomeScreen中,我们将展示如何使用CacheManager
来获取和存储数据。
import 'package:cache_x/cache_x.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
final CacheManager cacheManager;
HomeScreen({required this.cacheManager});
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('CacheX Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 从缓存中获取数据
String? cachedData = await widget.cacheManager.getObject<String>('my_key');
if (cachedData != null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Cached Data: $cachedData')),
);
} else {
// 如果缓存中没有数据,则从网络或其他地方获取数据,并存储到缓存中
String newData = 'Hello, this is new data!';
await widget.cacheManager.putObject<String>('my_key', newData);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Data fetched and cached')),
);
}
},
child: Text('Get/Cache Data'),
),
ElevatedButton(
onPressed: () async {
// 清除缓存中的数据
await widget.cacheManager.removeObject('my_key');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Cache cleared')),
);
},
child: Text('Clear Cache'),
),
],
),
),
);
}
}
解释
-
初始化CacheManager:在
main
函数中,我们创建了一个CacheManager
实例,并配置了缓存的默认持续时间、最大缓存对象数量、内存缓存和持久化缓存的设置。 -
获取和存储数据:在
HomeScreen
中,我们有两个按钮。第一个按钮尝试从缓存中获取数据。如果缓存中没有数据,它会生成一些新数据并将其存储到缓存中。第二个按钮用于清除缓存中的数据。 -
显示SnackBar:为了用户交互的反馈,我们使用
ScaffoldMessenger.of(context).showSnackBar
来显示SnackBar消息。
这个示例展示了如何使用cache_x
进行基本的数据缓存操作。你可以根据需要进一步扩展和自定义缓存行为。