我已经将数据存储在配置单元框中,但每当我在脱机模式下重新启动应用程序或杀死应用程序时,即当没有互联网连接时,数据就会重置;显示null错误。
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");
确保将模型的所有参数传递给构造函数,例如下面的代码
@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
);
}
因此,任务会自动设置为空列表,因为它们无法传递给构造函数。
如果您在调试模式中遇到这种情况,那么您可能没有注意到调试应用程序和在发布模式中使用它之间的区别。
您的应用程序可能运行良好,例如,如果您在Android模拟器上调试应用程序,请确保每当您关闭模拟器并希望再次打开它时,请确保模拟器不会在您再次打开时清除所有手机数据,因此看起来Hive
没有保存您的数据,但实际上模拟器设置它将在启动时清除所有电话数据。
这与Hive
:的关系
Hive
软件包是一个键值数据库,它将数据保存在设备内的文件中,因此清除所有手机数据通常会清除这些文件。
你需要在真实的设备中尝试你的应用程序,以确保你的数据被保存,我建议先在发布模式版本中测试。