我有一个名为 DrawLine 的类,并且我已经生成了适配器类
import 'dart:ui';
import 'package:hive/hive.dart';
part 'draw_line.g.dart';
@HiveType(typeId: 0)
class DrawnLine extends HiveObject{
@HiveField(0)
final List<Offset> path;
@HiveField(1)
final Color color;
@HiveField(2)
final double width;
@HiveField(3)
final bool isEraser;
DrawnLine(this.path, this.color, this.width, this.isEraser);
}
当我尝试保存
DrawLine
对象列表时,出现错误,指示 hive 无法识别对象中的 Offset
类型。
这意味着我也必须为
Offset
制作一个适配器,但我不知道该怎么做。
任何帮助将不胜感激。
Hive 不支持 Offset。 Hive 仅支持 List、Map、DateTime 和 Uint8List。
要支持其他对象,您必须注册一个 TypeAdapter,它将对象从二进制形式转换为二进制形式。
在您的情况下,要支持 Offset,您必须创建自己的适配器并在 main 方法中注册它。
void main() async {
await Hive.initFlutter();
Hive.registerAdapter(OffsetAdapter());
await Hive.openBox<Offset>('offsetBox');
}
检查偏移适配器代码:
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
class OffsetAdapter extends TypeAdapter<Offset> {
@override
final typeId = 0;
@override
Offset read(BinaryReader reader) {
final value = reader.readMap();
final dx = value['dx'] as double;
final dy = value['dy'] as double;
return Offset(dx, dy);
}
@override
void write(BinaryWriter writer, Offset obj) {
writer.writeMap({
'dx': obj.dx,
'dy': obj.dy,
});
}
}
打开 offsetBox:
final box = Hive.box<Offset>('offsetBox');