Flutter数据持久化插件hive_built_value的使用
Flutter数据持久化插件hive_built_value的使用
我们扩展了Hive的功能以集成BuiltValue。唯一的变化是在hive_generator/lib/src/
目录下的文件:
- ⚡
class_builder.dart
- ⚡
enum_builder.dart
- ⚡
type_adapter_generator.dart
然而,我们也必须覆盖Hive以便告诉它使用我们的生成器版本。
快速、愉快且安全的NoSQL数据库
Hive是一个用纯Dart编写的轻量级且快速的键值数据库,灵感来源于Bitcask。
文档与示例 📖
如果您需要查询、多隔离支持或对象之间的链接,请查看 Isar数据库。
特性
- 🚀 跨平台:移动设备、桌面、浏览器
- ⚡ 高性能(参见基准测试)
- ❤️ 简单、强大且直观的API
- 🔒 内置强加密
- 🎈 无 原生依赖
- 🔋 完整的电池包
入门指南
请查看快速入门文档以开始使用。
使用方法
您可以像使用Map一样使用Hive。无需等待Future
。
var box = Hive.box('myBox');
box.put('name', 'David');
var name = box.get('name');
print('Name: $name');
存储对象
Hive不仅支持原生类型、列表和映射,还支持任何您喜欢的Dart对象。在存储对象之前,您需要生成一个类型适配器。
[@HiveType](/user/HiveType)(typeId: 0)
class Person extends HiveObject {
[@HiveField](/user/HiveField)(0)
String name;
[@HiveField](/user/HiveField)(1)
int age;
}
继承HiveObject
是可选的,但它提供了方便的方法,如save()
和delete()
。
var box = await Hive.openBox('myBox');
var person = Person()
..name = 'Dave'
..age = 22;
box.add(person);
print(box.getAt(0)); // Dave - 22
person.age = 30;
person.save();
print(box.getAt(0)) // Dave - 30
Hive ❤️ Flutter
Hive是为Flutter设计的。如果您需要一个轻量级的数据存储解决方案,Hive是完美的选择。添加所需的依赖项并初始化Hive后,您可以在项目中使用Hive:
import 'package:hive_built_value/hive_built_value.dart';
import 'package:hive_built_value_flutter/hive_flutter.dart';
class SettingsPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: Hive.box('settings').listenable(),
builder: (context, box, widget) {
return Switch(
value: box.get('darkMode'),
onChanged: (val) {
box.put('darkMode', val);
}
);
},
);
}
}
盒子是缓存的,因此足够快,可以直接在Flutter小部件的build()
方法中使用。
基准测试
1000次读取迭代 | 1000次写入迭代 |
---|---|
![]() |
![]() |
| SharedPreferences与Hive在读取性能上相当。SQLite表现较差。 | Hive在写入或删除时大大优于SQLite和SharedPreferences。 |
该基准测试是在OnePlus 6T上使用Android Q进行的。您可以自行运行基准测试。
*请注意,这个基准测试仅供参考。很难客观地比较数据库,因为它们的设计目的不同。
许可证
Copyright 2019 Simon Leier
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
示例代码
import 'dart:io';
import 'package:hive_built_value/hive_built_value.dart';
part 'main.g.dart';
[@HiveType](/user/HiveType)(typeId: 1)
class Person {
Person({required this.name, required this.age, required this.friends});
[@HiveField](/user/HiveField)(0)
String name;
[@HiveField](/user/HiveField)(1)
int age;
[@HiveField](/user/HiveField)(2)
List<String> friends;
[@override](/user/override)
String toString() {
return '$name: $age';
}
}
void main() async {
var path = Directory.current.path;
Hive
..init(path)
..registerAdapter(PersonAdapter());
var box = await Hive.openBox('testBox');
var person = Person(
name: 'Dave',
age: 22,
friends: ['Linda', 'Marc', 'Anne'],
);
await box.put('dave', person);
print(box.get('dave')); // Dave: 22
}
更多关于Flutter数据持久化插件hive_built_value的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据持久化插件hive_built_value的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用hive_built_value
插件进行数据持久化的代码示例。hive_built_value
是一个结合了Hive和Built Value的插件,用于在Flutter中实现高效且类型安全的数据持久化。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加必要的依赖:
dependencies:
flutter:
sdk: flutter
hive: ^2.0.4 # 请检查最新版本
hive_flutter: ^1.0.0 # 请检查最新版本,用于Hive在Flutter中的集成
built_value: ^8.0.7 # 请检查最新版本
built_collection: ^5.1.1 # 请检查最新版本
hive_built_value: ^2.0.0 # 请检查最新版本
2. 定义数据模型
使用Built Value定义一个不可变的数据模型。例如,我们定义一个简单的用户模型:
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'user.g.dart';
abstract class User implements Built<User, UserBuilder> {
String get name;
int get age;
// Boilerplate code needed to wire everything together
User._();
factory User([void Function(UserBuilder) updates]) = _$User;
static Serializer<User> get serializer => _$userSerializer;
}
然后运行flutter pub run build_runner build
来生成所需的代码。
3. 注册适配器
为了使Hive能够识别并使用我们的Built Value模型,我们需要注册一个适配器:
import 'package:hive/hive.dart';
import 'package:hive_built_value/hive_built_value.dart';
import 'user.dart';
part 'adapters.g.dart';
@HiveType(typeId: 0)
class UserAdapter extends TypeAdapter<User> with BuiltValueHiveAdapter<User> {}
同样,运行flutter pub run build_runner build
来生成适配器代码。
4. 初始化Hive并打开Box
在应用启动时初始化Hive并打开一个Box:
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'adapters.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 注册适配器
Hive.registerAdapter(UserAdapter());
// 打开Hive
await Hive.initFlutter();
// 打开Box(如果不存在会自动创建)
var box = await Hive.openBox<User>('users');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Hive Built Value Example')),
body: Center(
child: Text('Check console for Hive operations'),
),
),
);
}
}
5. 使用Box进行CRUD操作
在你的应用中,你可以使用Hive Box来进行数据的CRUD操作:
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'user.dart';
void performHiveOperations() async {
var box = await Hive.openBox<User>('users');
// 创建用户
var user = User((b) => b
..name = 'Alice'
..age = 30);
// 保存用户
await box.put('alice', user);
// 读取用户
var retrievedUser = await box.get('alice');
print('Retrieved User: ${retrievedUser?.name}, Age: ${retrievedUser?.age}');
// 更新用户
await box.put('alice', user.rebuild((b) => b..age = 31));
// 删除用户
await box.delete('alice');
}
你可以在应用启动时或某个按钮点击事件中调用performHiveOperations
函数来进行Hive操作。
总结
上述代码展示了如何在Flutter中使用hive_built_value
插件进行数据的持久化。通过定义Built Value模型并注册适配器,我们可以方便地在Hive中进行数据的CRUD操作。这种方法结合了Hive的高效性和Built Value的类型安全性,非常适合在Flutter应用中使用。