Flutter数据序列化与反序列化插件hive_built_value_generator的使用
Flutter数据序列化与反序列化插件hive_built_value_generator的使用
在Flutter开发中,我们经常需要处理数据的序列化和反序列化。hive_built_value_generator
是一个强大的工具,可以帮助我们轻松实现这一过程。本文将通过一个完整的示例演示如何使用 hive_built_value_generator
插件。
安装依赖
首先,在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
hive: ^2.0.4
built_value: ^8.0.0
hive_flutter: ^1.1.0
hive_built_value_generator: ^0.9.0
build_runner: ^2.0.0
然后运行 flutter pub get
来安装这些依赖。
创建数据模型
接下来,我们需要创建一个数据模型类,并使用 @HiveType
和 @HiveField
注解来定义其属性。同时,我们还需要实现 Built
接口。
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:hive/hive.dart';
// 部分生成器文件
part 'person.g.dart';
// 定义Person类
@HiveType(typeId: 0)
abstract class Person implements Built<Person, PersonBuilder> {
// 构造函数
factory Person([void Function(PersonBuilder) updates]) = _$Person;
Person._();
// 属性
@HiveField(0)
String name;
@HiveField(1)
int age;
@HiveField(2)
BuiltMap<String, Pet>? get pets;
@HiveField(3)
@BuiltValueField(wireName: 'alternative_name')
String? get aka;
// 序列化方法
Map<String, dynamic> toJson() {
return serializers.serializeWith(Person.serializer, this);
}
// 反序列化方法
static Person fromJson(Map<String, dynamic> json) {
return serializers.deserializeWith(Person.serializer, json);
}
// 序列化器
static Serializer<Person> get serializer => _$personSerializer;
}
// 定义Pet类
@HiveType(typeId: 1)
abstract class Pet implements Built<Pet, PetBuilder> {
// 构造函数
factory Pet([void Function(PetBuilder) updates]) = _$Pet;
Pet._();
// 属性
@HiveField(0)
String name;
@HiveField(1)
String species;
// 序列化方法
Map<String, dynamic> toJson() {
return serializers.serializeWith(Pet.serializer, this);
}
// 反序列化方法
static Pet fromJson(Map<String, dynamic> json) {
return serializers.deserializeWith(Pet.serializer, json);
}
// 序列化器
static Serializer<Pet> get serializer => _$petSerializer;
}
生成代码
为了生成必要的代码,我们需要运行构建命令:
flutter pub run build_runner build
这将会生成 person.g.dart
和 pet.g.dart
文件,这些文件包含了序列化和反序列化的逻辑。
使用数据模型
现在我们可以开始使用我们的数据模型了。首先,打开数据库并存储数据,然后读取数据并进行反序列化。
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'person.dart'; // 引入数据模型
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
Hive.registerAdapter(PersonAdapter());
Hive.registerAdapter(PetAdapter());
var box = await Hive.openBox('myBox');
// 存储数据
var person = Person((b) => b
..name = 'Alice'
..age = 30
..pets = BuiltMap.of({'dog': Pet((b) => b..name = 'Rex'..species = 'Dog')})
..aka = 'Wonder Woman');
box.put('person', person);
// 读取数据
var personFromBox = box.get('person');
print(personFromBox.name); // 输出 "Alice"
print(personFromBox.age); // 输出 30
print(personFromBox.pets); // 输出 {"dog": Instance of 'Pet'}
print(personFromBox.aka); // 输出 "Wonder Woman"
}
class PersonAdapter extends TypeAdapter<Person> {
[@override](/user/override)
final int typeId = 0;
[@override](/user/override)
Person read(BinaryReader reader) {
return Person.fromJson(reader.readMap());
}
[@override](/user/override)
void write(BinaryWriter writer, Person obj) {
writer.writeMap(obj.toJson());
}
}
class PetAdapter extends TypeAdapter<Pet> {
[@override](/user/override)
final int typeId = 1;
[@override](/user/override)
Pet read(BinaryReader reader) {
return Pet.fromJson(reader.readMap());
}
[@override](/user/override)
void write(BinaryWriter writer, Pet obj) {
writer.writeMap(obj.toJson());
}
}
更多关于Flutter数据序列化与反序列化插件hive_built_value_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据序列化与反序列化插件hive_built_value_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
hive_built_value_generator
是一个用于 Flutter 和 Dart 的代码生成器插件,它与 hive
和 built_value
一起使用,帮助开发者更轻松地进行数据序列化和反序列化。通过使用 hive_built_value_generator
,你可以自动生成 built_value
模型的代码,从而减少手写代码的工作量。
1. 安装依赖
首先,你需要在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
built_value: ^8.4.0
hive: ^2.0.0
hive_flutter: ^1.1.0
dev_dependencies:
build_runner: ^2.1.0
hive_generator: ^1.1.0
built_value_generator: ^8.4.0
2. 创建数据模型
接下来,你可以创建一个数据模型类,并使用 @HiveType
和 @HiveField
注解来标记字段。例如:
import 'package:hive/hive.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'user_model.g.dart';
@HiveType(typeId: 1)
abstract class UserModel implements Built<UserModel, UserModelBuilder> {
@HiveField(0)
String get name;
@HiveField(1)
int get age;
UserModel._();
factory UserModel([void Function(UserModelBuilder) updates]) = _$UserModel;
static Serializer<UserModel> get serializer => _$userModelSerializer;
}
3. 生成代码
运行以下命令来生成代码:
flutter pub run build_runner build
这将生成 user_model.g.dart
文件,其中包含 UserModel
的序列化和反序列化代码。
4. 使用 Hive 进行数据存储
现在你可以使用 Hive 来存储和读取数据。首先,初始化 Hive 并注册适配器:
import 'package:hive_flutter/hive_flutter.dart';
import 'user_model.dart';
void main() async {
await Hive.initFlutter();
Hive.registerAdapter(UserModelAdapter());
await Hive.openBox('userBox');
var box = Hive.box('userBox');
var user = UserModel((b) => b
..name = 'John Doe'
..age = 30);
box.put('user', user);
var savedUser = box.get('user') as UserModel;
print('Name: ${savedUser.name}, Age: ${savedUser.age}');
}
5. 使用 built_value
进行序列化
built_value
还提供了序列化和反序列化的功能,你可以使用它来处理 JSON 或其他格式的数据。
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'user_model.dart';
void main() {
var user = UserModel((b) => b
..name = 'Jane Doe'
..age = 25);
var serializers = (Serializers().toBuilder()..addPlugin(StandardJsonPlugin())).build();
var json = serializers.serialize(user);
print(json);
var deserializedUser = serializers.deserializeWith(UserModel.serializer, json);
print('Deserialized: Name: ${deserializedUser.name}, Age: ${deserializedUser.age}');
}