我正在flutter中构建一个简单的预算应用程序,我使用Hive进行本地数据存储。我有一个周列表,当应用程序启动时,它会从一个hive框中加载:
class WeekList extends ChangeNotifier {
WeekList() {
int boxLength = box.length;
for (var i = 0; i < boxLength; i++) {
listOfWeeks.add(box.getAt(i));
}
}
我遇到的问题是,如果我开始新的一周,然后快速重启应用程序,它加载了上周的两个。添加新的一周运行以下代码:
void addWeek({
required double budget,
}) {
Week newWeek = Week(
budget: budget,
);
listOfWeeks.add(newWeek);
box.add(newWeek);
notifyListeners();
}
奇怪的是,如果我添加一个新的一周,并编辑一个值在一周,然后当我重新启动应用程序,它不会创建双倍的最后一周的负载...
更新一周中的值如下所示:
//updateSundayValue
void updateSunday(
{required double newValue, required int index, required Week week}) {
listOfWeeks[index].sunday = twoDecimalPlaces(newValue, 2);
listOfWeeks[index].sundayDisplayValue =
twoDecimalPlaces(newValue, 2).toString();
box.putAt(index, week);
notifyListeners();
}
它的奇怪,我认为,它将重复最后一周添加到名单上的负荷,如果我不编辑新的一周,我刚刚添加。
更新1:更多疑难排解
我正在进行一些更多的故障排除,通过在add周前后向代码中添加一堆print语句。
在下面的代码中,我选中了我的hive框,并将其所有内容加载到一个周列表中,然后打印出星期日的值。
然后运行addWeek()
函数,然后将所有内容从hive框重新加载到另一个周列表中,并将其输出。
在保存之前,我有两个星期,星期日的值是1和2。
然后,addWeek()
应该默认为星期日的值0。但是,当我看到print语句的输出时,它不知何故处理了它之前的一周,并打印出1、2和2,我希望它是1、2和0。
1条答案
按热度按时间a6b3iqyw1#
用box.put()代替box.add(),box.add()将继续添加数据并创建一个列表。用box.put(key,'Your string');它将工作