Flutter本地数据存储插件stash_isar的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter本地数据存储插件stash_isar的使用

stash_isar 是一个基于 stashisar 的扩展插件,提供了高效的本地数据存储功能。它使用 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

1 回复

更多关于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'),
        ),
      ],
    );
  }
}

注意事项

  1. 确保你已经按照stash_isar的文档正确配置了依赖和初始化。
  2. 在实际项目中,你需要处理异步操作的错误和结果。
  3. 你可以根据需求调整数据模型和UI。

以上代码展示了如何在Flutter中使用stash_isar进行基本的本地数据存储操作。希望这对你有所帮助!

回到顶部