我的项目中有一个名为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
这个问题不清楚。如果您可以编辑问题并添加完整的代码。你做了一些错事。
-
从配置单元框中删除对象时,最佳做法是传递键而不是索引。您只需调用
objectName.key
即可访问密钥。并且用于删除使用CCD_ 5。 -
删除时,只需要从配置单元框中删除即可。无需从列表中删除。使列表侦听配置单元框的更改。这是正确的方法。
如果你分享更多信息,我可以为你提供答案