Hive数据库中TypeAdapter定义与注册(解决exerciseAdapter未定义报错)
解决Hive中'exerciseAdapter() is not defined'的问题
要解决这个错误,你得先定义对应Exercise实体的TypeAdapter,具体步骤如下:
1. 配置依赖
先确保你的pubspec.yaml里添了这些依赖:
dependencies: hive: ^2.2.3 hive_flutter: ^1.1.0 dev_dependencies: hive_generator: ^1.1.5 build_runner: ^2.1.7
配置完后运行flutter pub get拉取依赖。
2. 定义Exercise实体类
新建一个exercise.dart文件,写你的数据模型,记得用Hive的注解标记:
import 'package:hive/hive.dart'; // 给实体分配唯一的typeId(范围0-223,别和其他实体重复) @HiveType(typeId: 0) class Exercise extends HiveObject { // 每个字段用@HiveField标记索引,索引不能重复 @HiveField(0) final String name; @HiveField(1) final int duration; @HiveField(2) final bool isCompleted; Exercise({required this.name, required this.duration, required this.isCompleted}); }
3. 自动生成适配器
在终端执行下面的命令,让Hive自动生成适配器文件:
flutter packages pub run build_runner build
执行完会生成一个exercise.g.dart文件,里面包含自动生成的ExerciseAdapter类。
4. 导入并注册适配器
回到main.dart,导入相关文件后注册适配器:
import 'package:hive/hive.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'exercise.dart'; import 'exercise.g.dart'; // 导入生成的适配器 main() async { runApp(MyApp()); await Hive.initFlutter(); // 注册自动生成的适配器 Hive.registerAdapter(ExerciseAdapter()); await Hive.openBox('exerciseBox'); SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, ]); }
手动写适配器(可选)
要是不想用自动生成,也可以手动写适配器类:
class ExerciseAdapter extends TypeAdapter<Exercise> { @override final typeId = 0; // 和实体类的typeId保持一致 @override Exercise read(BinaryReader reader) { return Exercise( name: reader.read(), duration: reader.read(), isCompleted: reader.read(), ); } @override void write(BinaryWriter writer, Exercise obj) { writer.write(obj.name); writer.write(obj.duration); writer.write(obj.isCompleted); } }
写完后同样在main里注册这个适配器就行。
内容的提问来源于stack exchange,提问作者nsa41620
相关产品推荐
相关产品推荐

