应用程序重启后,Flutter Hive在列表中获得了两个项目

siv3szwd  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(161)

我正在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。

a6b3iqyw

a6b3iqyw1#

用box.put()代替box.add(),box.add()将继续添加数据并创建一个列表。用box.put(key,'Your string');它将工作

相关问题