我已将数据存储在 Hive 框中,但每当我重新启动应用程序或在离线模式下终止应用程序时,即当没有互联网连接时,数据就会重置并显示空错误。
await Hive.initFlutter();
Hive.registerAdapter<ProgressList>(ProgressListAdapter());
Hive.registerAdapter<VideoList>(VideoListAdapter());
Hive.registerAdapter<DashBoard>(DashBoardAdapter());
Hive.registerAdapter<CourseDetails>(CourseDetailsAdapter());
Hive.registerAdapter<AnnouncementsListData>(AnnouncementsListDataAdapter());
Hive.registerAdapter<VideoAssignments>(VideoAssignmentsAdapter());
Hive.registerAdapter<LessonDetail>(LessonDetailAdapter());
Hive.registerAdapter<CourseQuestions>(CourseQuestionsAdapter());
await Hive.openBox<ProgressList>("box");
await Hive.openBox<VideoList>("video_box");
await Hive.openBox<DashBoard>("dashboard_box");
await Hive.openBox<CourseDetails>("course_box");
await Hive.openBox<AnnouncementsListData>("announcement_box");
await Hive.openBox<VideoAssignments>("vfs_feedback_box");
await Hive.openBox<LessonDetail>("lesson_box");
await Hive.openBox<CourseQuestions>("questions_box");
await Hive.openBox("video_record_box");
如果您在调试模式下遇到此问题,那么您可能没有注意到调试应用程序和在发布模式下使用它之间的区别。
您的应用程序可能运行良好,如果您在 Android 模拟器上调试您的应用程序作为示例,请确保每当您关闭模拟器并想要再次打开它时,请确保模拟器不会清除所有手机数据每当您再次打开它时,看起来
Hive
没有保存您的数据,但实际上模拟器设置它会在启动时清除所有手机数据。
这与
Hive
有何关系:
Hive
软件包是一个键值数据库,它将其数据保存在设备内的文件中,因此清除所有手机数据通常会清除这些文件。
您需要在真实设备中尝试您的应用程序,以确保您的数据已保存,我建议首先在发布模式版本中进行测试。
确保将模型的所有参数传递给构造函数,例如下面的代码中
@HiveType(typeId: 22)
class WeeklyListModel extends HiveObject {
@HiveField(0)
final String id;
@HiveField(1)
final List<TaskModel> tasks = [];
WeeklyListModel(this.id);
}
适配器的读取功能会是这样的
@override
WeeklyListModel read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return WeeklyListModel(
fields[0] as String
);
}
因此任务会自动设置为空列表,因为它们无法传递给构造函数。