由于NULL错误,使用Hive deleteAt()使我的flutter项目崩溃



我的项目中有一个名为Weeks的对象列表,在我运行delete函数从配置单元框中删除项目后,代码运行良好。但当我重新启动应用程序,它初始化并从盒子中加载项目时,我会收到这个错误:

_TypeError(类型"Null"不是类型"Week"的子类型(

我的删除功能如下:

//Delete Week
void deleteWeek({required int weekIndex}) {
print(box.length);
listOfWeeks.removeAt(weekIndex);
box.deleteAt(weekIndex);
print(box.length);
notifyListeners();
}

一开始我想我可能从box中删除了太多,所以我打印出长度,在上面的函数中运行box.deleteAt(weekIndex);后,长度会下降一。

我的添加周功能运行完美,重新启动应用程序后没有问题:

void addWeek({
required double budget,
}) {
Week newWeek = Week(
budget: budget,
);
listOfWeeks.add(newWeek);
box.add(newWeek);
notifyListeners();
}

由于删除功能基本上是相反的添加功能,我不确定我做错了什么。在这一点上,我唯一的假设是box.deleteAt()函数也没有按我预期的方式运行。它的工作原理与listOfWeeks.removeAt(weekIndex);类似吗?

有关更多信息,weeks类在重新启动时初始化为:

@HiveType(typeId: 1)
class WeekList extends ChangeNotifier {
WeekList() {
print("Loading box");
int boxLength = box.length;
for (var i = 0; i < boxLength; i++) {
listOfWeeks.add(box.get(i));
}
}

这是因为安全性为空。当项目第一次初始化时,值首先为Null,这是不安全的。

要使函数返回类型能够保持null,则需要用?标记它?,例如:

Week? getWeek(){….}

更多信息请点击此处:https://dart.dev/null-safety

这个问题不清楚。如果您可以编辑问题并添加完整的代码。你做了一些错事。

  1. 从配置单元框中删除对象时,最佳做法是传递键而不是索引。您只需调用objectName.key即可访问密钥。并且用于删除使用CCD_ 5。

  2. 删除时,只需要从配置单元框中删除即可。无需从列表中删除。使列表侦听配置单元框的更改。这是正确的方法。

如果你分享更多信息,我可以为你提供答案

相关内容

  • 没有找到相关文章