You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:45:07