如何解决如何使用 HIVE、Flutter 为两个不同的 Modal 类注册两个适配器?
我的 main.dart 文件在注册 todosAdapter()
时出错 WidgetsFlutterBinding.ensureInitialized();
final appDocumentDirectory =
await path_provider.getApplicationDocumentsDirectory();
await Hive.initFlutter();
Hive.registeradapter(notesAdapter());
Hive.registeradapter(todosAdapter());
await Hive.openBox("notes");
//await Hive.openBox("todo");
runApp(ChangeNotifierProvider(
create: (context) => Note_tile(),child: MaterialApp(
debugShowCheckedModeBanner: false,home: MyHomePage(),theme: ThemeData(brightness: Brightness.dark),),));
}
时出错
未定义函数“todosAdapter”。 尝试导入定义“todosAdapter”的库,将名称更正为现有函数的名称,或定义名为“todosAdapter”的函数。
我的第一个 Modal 类是笔记
part 'note.g.dart';
var date = new DateTime.Now().toString();
var dateParse = DateTime.parse(date);
var formattedDate = "${dateParse.day}-${dateParse.month}-${dateParse.year}";
@HiveType(typeId: 0)
class notes {
@HiveField(0)
late String title;
@HiveField(1)
late String description;
@HiveField(2)
late String date = formattedDate;
notes({required this.title,required this.description});
}
note modal 类的 .g.dart 文件是
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'note.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class notesAdapter extends TypeAdapter<notes> {
@override
final int typeId = 0;
@override
notes read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int,dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),};
return notes(
title: fields[0] as String,description: fields[1] as String,)..date = fields[2] as String;
}
@override
void write(BinaryWriter writer,notes obj) {
writer
..writeByte(3)
..writeByte(0)
..write(obj.title)
..writeByte(1)
..write(obj.description)
..writeByte(2)
..write(obj.date);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this,other) ||
other is notesAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
我的第二个 Modal 类是待办事项
import 'package:hive/hive.dart';
part 'todo.g.dart';
var date = new DateTime.Now().toString();
var dateParse = DateTime.parse(date);
var formattedDate = "${dateParse.day}-${dateParse.month}-${dateParse.year}";
@HiveType(typeId: 0)
class todos {
@HiveField(0)
late String title;
@HiveField(1)
late String description;
@HiveField(2)
late String date = formattedDate;
@HiveField(3)
late bool status = false;
todos({required this.title,required this.description});
}
todos 类的 .g.dart 文件是
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'todo.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class todosAdapter extends TypeAdapter<todos> {
@override
final int typeId = 0;
@override
todos read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int,};
return todos(
title: fields[0] as String,)
..date = fields[2] as String
..status = fields[3] as bool;
}
@override
void write(BinaryWriter writer,todos obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.title)
..writeByte(1)
..write(obj.description)
..writeByte(2)
..write(obj.date)
..writeByte(3)
..write(obj.status);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this,other) ||
other is todosAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
解决方法
Todos
和 Notes
不应具有相同的 typeId
。尝试更改其中之一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。