引入
dependencies:
hive: ^1.4.1+1 // 数据库
hive_flutter: ^0.3.0+2 //flutter的拓展
dev_dependencies:
hive_generator: ^0.7.0+2 // 注解解析器,自动生成Adapter
build_runner: ^1.10.0
初始化
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
Hive.initFlutter('hive_db'); //flutter项目中在ApplicationDocumentDir下参数为子目录,
// 生成的boxes文件的保存路径简单使用
// 1.创建box. box相当于数据库的表的概念。每个box会保存在单独文件中。
var boxName = ‘test’; //名称要用全小些
await Hive.openBox<String>(boxName); // 创建box
// 2.保存数据
var box = Hive.box(boxName); //获取box
if(box.isOpen){ // 判断是否已开启
// 增
box.put('key', 'value'); // 存储键值对
Map<String, String> entries = {'a':'aaa','b':'bbb'};
box.putAll(entries); // 存储map
box.putAt(0, 'ccc'); // 将[值]与第n个key关联。如果密钥不存在,则引发异常
box.add('ddd'); //用自动递增key保存[值]
List<String> values = [];
box.addAll(values); //用自动递增key保存数组
print('box.length = ${box.length}');
// 查
var v1 = box.get('key', defaultValue: ''); //以自定义键取值
var v2 = box.getAt(2); //以自增的键取值
var list= box.values; // 所有的值 按键的顺序排序 、
var keys= box.keys; // 所有的键
var lists= box.valuesBetween(startKey: 1, endKey: 3); // 所有的键
// 删
box.delete('key'); // 删除单个
box.deleteAll(keys.toList().sublist(3)); // 删除多个
box.deleteAt(0); //删除指定位置的
box.clear(); // 清空
box.close(); // 关闭
}
自定义类型数据
1.定义类
import 'package:hive/hive.dart';
part 'test_info.g.dart';
@HiveType(typeId: 0)
class TestInfo extends HiveObject{
@HiveField(0)
String name;
TestInfo(this.name);
}
2.执行命令$flutter packages pub run build_runner build
生成 adapter
3.注册
Hive.registerAdapter(TestInfoAdapter()); // 当要存取自定义的数据类型时 需先注册相应Aapter
4.使用
var box = Hive.box(boxName); //获取box
box.add(TestInfo('aaa');