Flutter本地数据存储插件stash_isar的使用
Flutter本地数据存储插件stash_isar的使用
stash_isar
是一个基于 stash
和 isar
的扩展插件,提供了高效的本地数据存储功能。它使用 msgpack
序列化格式来存储数据,并支持缓存和保险库(Vault)两种存储方式。
概述
stash_isar
提供了一个基于 isar
的存储后端,利用高效的二进制序列化格式(如 msgpack
)来存储数据。该插件适用于需要高效本地存储的应用场景。
开始使用
添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
stash_isar: ^x.x.x
运行以下命令安装依赖:
dart pub get
导入所需的库:
import 'package:stash/stash_api.dart';
import 'package:stash_isar/stash_isar.dart';
使用示例
Vault 示例
以下是一个使用 stash_isar
创建保险库(Vault)的示例:
import 'dart:io';
import 'package:stash/stash_api.dart';
import 'package:stash_isar/stash_isar.dart';
class Task {
final int id;
final String title;
final bool completed;
Task({required this.id, required this.title, this.completed = false});
/// 从 JSON 映射创建 [Task]
factory Task.fromJson(Map<String, dynamic> json) => Task(
id: json['id'] as int,
title: json['title'] as String,
completed: json['completed'] as bool);
/// 将 [Task] 转换为 JSON 映射
Map<String, dynamic> toJson() =>
<String, dynamic>{'id': id, 'title': title, 'completed': completed};
[@override](/user/override)
String toString() {
return 'Task $id, "$title" is ${completed ? "completed" : "not completed"}';
}
}
void main() async {
// 获取临时目录路径
final path = Directory.systemTemp.path;
// 创建存储实例
final store = await newIsarDefaultVaultStore(path: path);
// 创建一个名为 'vault' 的保险库
final vault = await store.vault<Task>(
name: 'vault',
fromEncodable: (json) => Task.fromJson(json),
eventListenerMode: EventListenerMode.synchronous)
..on<VaultEntryCreatedEvent<Task>>().listen(
(event) => print('Key "${event.entry.key}" added to the vault'));
// 向保险库中添加一个任务
await vault.put(
'task1', Task(id: 1, title: 'Run vault store example', completed: true));
// 从保险库中获取任务
print(await vault.get('task1'));
// 关闭保险库
vault.close();
}
Cache 示例
以下是一个使用 stash_isar
创建缓存(Cache)的示例:
import 'dart:io';
import 'package:stash/stash_api.dart';
import 'package:stash_isar/stash_isar.dart';
class Task {
final int id;
final String title;
final bool completed;
Task({required this.id, required this.title, this.completed = false});
/// 从 JSON 映射创建 [Task]
factory Task.fromJson(Map<String, dynamic> json) => Task(
id: json['id'] as int,
title: json['title'] as String,
completed: json['completed'] as bool);
/// 将 [Task] 转换为 JSON 映射
Map<String, dynamic> toJson() =>
<String, dynamic>{'id': id, 'title': title, 'completed': completed};
[@override](/user/override)
String toString() {
return 'Task $id, "$title" is ${completed ? "completed" : "not completed"}';
}
}
void main() async {
// 获取临时目录路径
final path = Directory.systemTemp.path;
// 创建存储实例
final store = await newIsarDefaultCacheStore(path: path);
// 创建一个名为 'cache1' 的缓存,最大容量为 10
final cache = await store.cache<Task>(
name: 'cache1',
fromEncodable: (json) => Task.fromJson(json),
maxEntries: 10,
eventListenerMode: EventListenerMode.synchronous)
..on<CacheEntryCreatedEvent<Task>>().listen(
(event) => print('Key "${event.entry.key}" added to the cache'));
// 向缓存中添加一个任务
await cache.put(
'task1', Task(id: 1, title: 'Run cache store example', completed: true));
// 从缓存中获取任务
print(await cache.get('task1'));
// 关闭缓存
cache.close();
}
更多关于Flutter本地数据存储插件stash_isar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据存储插件stash_isar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用stash_isar
插件进行本地数据存储的示例代码。stash_isar
是一个高性能的Isar数据库客户端,专为Flutter和Dart设计。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加stash_isar
的依赖:
dependencies:
flutter:
sdk: flutter
stash_isar: ^latest_version # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 初始化Isar数据库
在你的Flutter应用中,你需要初始化Isar数据库。通常,你会在应用的入口文件(例如main.dart
)中完成这一操作。
import 'package:flutter/material.dart';
import 'package:stash_isar/stash_isar.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Isar数据库
final isar = await Isar.open({
'dir': 'isar_database', // 数据库存储目录
'schema': [
IsarCollectionSchema(
name: 'users',
schemas: [
IsarSchema(
name: 'id',
type: IsarType.int,
isPrimaryKey: true,
),
IsarSchema(
name: 'name',
type: IsarType.string,
),
IsarSchema(
name: 'email',
type: IsarType.string,
),
],
),
],
});
runApp(MyApp(isar: isar));
}
class MyApp extends StatelessWidget {
final Isar isar;
MyApp({required this.isar});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Stash Isar Example'),
),
body: Center(
child: MyHomePage(isar: isar),
),
),
);
}
}
3. 使用Isar数据库进行CRUD操作
接下来,我们创建一个简单的页面来演示如何对数据库进行增删改查操作。
import 'package:flutter/material.dart';
import 'package:stash_isar/stash_isar.dart';
class MyHomePage extends StatefulWidget {
final Isar isar;
MyHomePage({required this.isar});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late IsarCollection<dynamic> usersCollection;
@override
void initState() {
super.initState();
usersCollection = widget.isar.collection('users');
}
Future<void> addUser() async {
await usersCollection.insert({
'id': 1,
'name': 'John Doe',
'email': 'john.doe@example.com',
});
setState(() {});
}
Future<void> getUser() async {
final user = await usersCollection.get(1);
print('User: ${user?.toJson()}');
}
Future<void> updateUser() async {
await usersCollection.put(1, {
'name': 'Jane Doe',
'email': 'jane.doe@example.com',
});
setState(() {});
}
Future<void> deleteUser() async {
await usersCollection.delete(1);
setState(() {});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: addUser,
child: Text('Add User'),
),
ElevatedButton(
onPressed: getUser,
child: Text('Get User'),
),
ElevatedButton(
onPressed: updateUser,
child: Text('Update User'),
),
ElevatedButton(
onPressed: deleteUser,
child: Text('Delete User'),
),
],
);
}
}
注意事项
- 确保你已经按照
stash_isar
的文档正确配置了依赖和初始化。 - 在实际项目中,你需要处理异步操作的错误和结果。
- 你可以根据需求调整数据模型和UI。
以上代码展示了如何在Flutter中使用stash_isar
进行基本的本地数据存储操作。希望这对你有所帮助!