基于 Hive 的 Flutter 文档类型存储

news2024/11/24 3:16:32

基于 Hive 的 Flutter 文档类型存储

alt

原文 https://medium.com/gytworkz/document-type-storage-in-flutter-using-hive-a18ea9659d84

前言

alt

长久以来,我们一直使用共享首选项以键对格式在本地存储中存储数据,或者使用 SQLite 在 SQL 数据库中存储数据。

存储本地数据的另一种方法是将其存储为文档格式,类似于使用 Hive 包的 Firebase 云存储。

https://pub.dev/packages/hive

正文

Features 特征

  • 跨平台: 移动,桌面,浏览器
  • 表演很棒
  • 径简单,强大,直观的 API
  • 内置了很强的加密
  • 没有本机依赖项

Advantage 优势

  • 便于存储和检索
  • 比其他存储技术更快更高效

Benchmark 基准

alt

速度对比

Implementation 实施

步骤 1: 在 pubspec.yaml 中添加依赖项

dependencies:
  hive: ^[version]
  hive_flutter: ^[version]

dev_dependencies:
  hive_generator: ^[version]
  build_runner: ^[version]

第二步: 初始化 hive

await Hive.initFlutter();

步骤 3: 创建一个框

提示: 使用 path_Provider 包获取应用程序的本地目录

alt
  • 盒子是什么?

存储在 Hive 中的所有数据都组织在框中。框可以与 SQL 中的表进行比较,但它没有结构,可以包含任何内容。

对于一个小型应用程序,一个单独的框可能就足够了。对于更高级的问题,框是组织数据的好方法。还可以对盒子进行加密以存储敏感数据。

可以选择,但建议!

要知道盒子可以容纳的确切数据,您可以指定盒子的类型

var box = await Hive.openBox<User>('users');

box.add(User());

box.add(5); // Compile time error

Advance Stage 前期阶段

现在是时候创建一个可以存储在蜂箱中的模型了。

步骤 1: 创建 typeAdapter

  • 首先使用冻结注释为数据创建一个模型。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

使用 https://app.quicktype.io 创建具有冻结注释的模型。

alt

sample model class

样本模型类

每个类都必须用具有唯一 typeID 的@HiveType 进行注释,每个字段都必须用具有唯一 fieldID 的@HiveField 进行注释。

使用生成器命令创建生成的类。

抖动 Pub 运行 build_runner build ー删除-冲突-输出

这将创建适配器,您可以使用它们在 main.dart 文件中进行初始化。

alt

adapter initialisation

适配器初始化适配器初始化

一旦您注册了适配器。现在您可以保存在蜂箱中的数据。

步骤 2: 创建 Hive 存储类

alt

Local db class to save the stock model

保存股票模型的本地 db 类

通过创建这个类,您可以轻松地存储和检索来自 hive 框的数据,并在应用程序中使用它。如果你一直关注这个博客到现在,你已经成功地把文档存储在蜂箱里了。

Properties 属性

  • 存储数据
var box = Hive.box('myBox');


box.put('name''Paul');


box.put('friends', ['Dave''Simon''Lisa']);


box.put(123'test');


box.putAll({'key1''value1'42'life'});
  • 检索数据
var box = await Hive.openBox('box');


box.put('key''value');

print(box.get('key')); // value


var lazyBox = await Hive.openLazyBox('lazyBox');


var future = lazyBox.put('key''value');

print(lazyBox.get('key')); // null


await future;

print(lazyBox.get('key')); // value
  • 删除数据
var box = await Hive.openBox('box');


box.put('key''value');

print(box.get('key')); // value


var lazyBox = await Hive.openLazyBox('lazyBox');


var future = lazyBox.put('key''value');

print(lazyBox.get('key')); // null


await future;

print(lazyBox.get('key')); // valuebox.delete('key')// delete data

感谢您的阅读,如果您发现任何差异,请评论,并会给您回复。跟随我们的 Flutter 相关的内容。

结束语

如果本文对你有帮助,请转发让更多的朋友阅读。

也许这个操作只要你 3 秒钟,对我来说是一个激励,感谢。

祝你有一个美好的一天~


© 猫哥

  • 微信 ducafecat

  • https://wiki.ducafecat.tech

  • https://video.ducafecat.tech

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSP | JSP原理深度剖析、基础语法

目录 一&#xff1a;分析使用纯粹Servlet开发web应用的缺陷 二&#xff1a;JSP原理深度剖析 三&#xff1a;JSP的基础语法 一&#xff1a;分析使用纯粹Servlet开发web应用的缺陷 &#xff08;1&#xff09;在Servlet当中编写HTML/CSS/JavaScript等前端代码存在什么问题&…

基于ATX自动化测试解决方案

在整车开发中&#xff0c;诊断功能实现后需要进行测试验证。测试验证主要分为两个方面&#xff1a;诊断协议层测试和诊断功能测试。诊断协议层测试&#xff1a;需要对服务层服务定义、传输层相关时间参数进行测试验证&#xff1b;诊断功能测试&#xff1a;需要对各诊断功能项&a…

国产操作系统之银河麒麟服务器版V10安装

一、银河麒麟操作系统简介 银河麒麟是目前国内国产化操作系统主流产品之一。银河麒麟高级服务器操作系统V10是针对企业级关键业务&#xff0c;适应虚拟化、云计算、大数据、工业互联网时代对主机系统可靠性、安全性、性能、扩展性和实时性等需求&#xff0c;依据CMMI5级标准研制…

Java中的引用

Java中的引用强引用软引用弱引用虚引用终结器引用&#xff08;FinalReference)JDK 1.2版本之后&#xff0c;Java对引用的概念进行了扩充&#xff0c;将引用分为强引用&#xff08;Strongly Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#…

时间序列:时间序列模型---移动平均过程(Moving Average Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 我们从白噪声生成另一种时间序列。如下式&#xff1a; 这种时间序列的值由此刻的白噪声实现&#xff08;white noise realization)加上beta倍的前一刻的白噪声实现。注意这个beta跟CAPM模型的beta没有…

Linux redict 输入输出重定向 详细使用方法 文件描述符

Linux redict 重定向 Linux 重定向 在 Linux 系统中&#xff0c;我们需要输入和输出让系统与外部进行交互&#xff0c;比如在我们使用鼠标、键盘等输入设备时其实就是通过输入的方式让数据进行系统中。而系统输出一般就会打印在显示器上、刻录光盘等等。而我们要讲的重定向也…

【学习笔记70】数据劫持

一、 数据驱动视图 多次渲染页面&#xff0c;多的时候&#xff0c;比较麻烦和繁琐const box document.querySelector(.box)const obj {name: QF666,age: 18}box.innerHTML 名字: ${obj.name}; 年龄: ${obj.age};obj.age 99;box.innerHTML 名字: ${obj.name}; 年龄:…

RabbitMQ系列【16】AmqpTemplate接口详解

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言AmqpTemplateAPIsendconvertAndSendreceivereceiveAndConvertreceiveAndReplysendAndReceiveconvertSendAndReceive前言 RabbitTemplate 是spring-amqp提供的一个 RabbitMQ 消息操作模板类…

【Git】rebase 和 merge 的区别

前言 今天想把本地的两个提交压缩成一个提交&#xff0c;再推送到远程。用的是rebase命令解决的&#xff0c;于是乎又捡起了之前的遗留问题&#xff1a;rebase和 merge 有什么区别&#xff1f; 用的是idea内置的git插件&#xff0c;先把idea官网对 “update project” 选择 “…

postgresql使用pg_basebackup备份与恢复

postgresql可以使用pg_dump,pg_restore等命令来进行备份与恢复&#xff0c;那种情况不用停止pgsql服务&#xff0c;只需要执行备份恢复命令即可。 今天介绍的这种备份方式&#xff0c;类似于文件系统的备份与恢复&#xff0c;它需要使用pg_basebackup命令来进行备份&#xff0c…

C#医院门诊会员管理系统源码 通用会员系统源码

C#通用医院会员管理系统源码 源码分享&#xff01; 本系统使用的技术为NhibernateEF,底层完全封装&#xff0c;可二次使用快速开发。 本技术具有以下特点&#xff1a; 1.面向对象方式访问数据库&#xff0c;摆脱SQL&#xff1b; 2.可移植性强&#xff0c;支持所有流行的数据…

光格科技递交科创板上会稿:拟募资6亿 预计年营收3亿

雷递网 雷建平 11月29日苏州光格科技股份有限公司&#xff08;简称&#xff1a;“光格科技”&#xff09;日前递交上会稿&#xff0c;准备在科创板上市。光格科技计划募资6亿&#xff0c;其中&#xff0c;3.1亿元用于分布式光纤传感系统升级研发及量产项目&#xff0c;8000万元…

Java EE|多线程基本操作

文章目录一、一个简单的线程程序及运行二、线程的创建三、线程类——Thread详解常见构造方法常见几个属性线程的启动——start()线程的中断线程的等待——join()线程引用的获取线程的休眠四、多线程编程效率举例一、一个简单的线程程序及运行 在写这样一个代码之前&#xff0c…

web框架

目录 1 左右分割窗口 2 上下分割窗口 3 嵌套分割窗口 4 内联框架 框架的作用是把浏览器窗口划分成若干个小窗口&#xff0c;每个小窗口可以分别显示不同的网页。 框架的基本结构主要分为框架集和框架两个部分&#xff0c;在网页中分别用<frameset>和<frame>标记…

Netty进阶——粘包与半包(代码示例)

目录一、消息粘包和消息半包的概述1.1、消息粘包1.2、消息半包二、粘包现象代码示例2.1、粘包现象服务端示例代码2.2、粘包现象客户端示例代码2.3、分别启动服务端&#xff0c;客户端&#xff0c;查看服务端结果输出三、半包现象代码示例3.1、半包现象服务端示例代码3.2、半包现…

【JavaSE】学习异常

前言&#xff1a; 作者简介&#xff1a;爱吃大白菜1132 人生格言:纸上得来终觉浅&#xff0c;绝知此事要躬行 如果文章知识点有错误的地方不吝赐教&#xff0c;和大家一起学习&#xff0c;一起进步&#xff01; 如果觉得博主文章还不错的话&#xff0c;希望三连支持&#xff01…

D-020 SPI FLASH硬件电路设计

SPI FLASH硬件电路设计1 简介2 EEPROM 和SPI Flash的区别3 电路设计实战4 电路设计要点1 简介 SPI FLASH(Serial Peripheral Interface)是串行外设接口的缩写&#xff0c;是一种高度、全双工、同步的通信总线。一般应用在MCU与外围设备之间通讯&#xff0c;广泛应用在FLASH&am…

从模型容量的视角看监督学习

这几天看离线强化学习瞎想的&#xff0c;不一定正确&#xff0c;仅记录个人想法 文章目录1. 监督学习的本质2. 容量视角下的模型选择、正则化和归纳偏置3. 几点启发1. 监督学习的本质 我认为监督学习的本质在于在过拟合和欠拟合之间取得平衡&#xff0c;捋一下逻辑 我们知道&a…

基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的医药销售管理系统

项目介绍 药品一直以来在人类生活中扮演着非常重要的角色&#xff0c;随着时代的飞速发展&#xff0c;人们基本已经告别了那个缺医少药的年代&#xff0c;各大药房基本随处都可以购买&#xff0c;但是很多时候因为没有时间或者在药店很难找到自己想要购买的药品&#xff0c;所…

[附源码]计算机毕业设计springboot个人博客系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…